3일차 - 연산
1번) 문자열 섞기 (언어: C++)
string 2개에 있는 문자열 (char)을 하나씩 차례대로 넣는 것 입니다. 위의 if문은 제한사항을 지키기 위해 만든 것 입니다. 이후 for문 반복문에서 i 값이 짝수이면 str1의 i번째 문자열을 입력하고, 반대로 홀수이면 str2의 i번째 문자열을 입력합니다.
2번) 문자 리스트를 문자열로 변환하기 (언어: C++)
프로그래머스 풀면서 백터 (vector)가 처음 나왔습니다. 이는 STL (Standard Template Library) 중 하나이며 C++에 매우 중요한 라이브러리 기능 중 하나입니다. 백터의 크기는 10번줄과 같이 arr.size()로 백터 크기 값을 구하면 됩니다. 이번 문제는 간단하게 vector<string>을 string으로 옮기는 것이라 for문 반복문으로 백터 배열 값을 넣어서 하면 됩니다.
3번) 문자열 곱하기 (언어: C++)
이번 문제의 핵심은 string값을 중복적으로 출력을 하는 것입니다. 이는 for문 반복문으로 매우 쉽게 해결할 수 있습니다.
4번) 더 크게 합치기 (언어: C++)
이번에는 조금 어려운 문제였습니다. 2개의 수를 더하기로 합치는 것이 아닌 정수를 붙여서 정수 최대 크기를 구하는 것입니다. #include<cmath>에 있는 pow 함수를 대신해서 int pow(int a, int b) 함수를 만들어서 썼습니다. 일단 이번 문제 핵심으로 중요했던 부분은 1) 정수 a와 b의 자리수를 구하는 것, 2) 정수를 붙이는 것, 3) 최대로 큰 정수 붙인 값을 구하는 것입니다.
1번인 자리수 구하는 방법은 while문 반복문으로 구했습니다. 정수 a와 b 값이 한 자리 수 될 때까지 진행하는 조건을 내세우고 a와 b를 10씩 나누면서 자리수를 aDigit, bDigit인 int 값에 1씩 증가시키면서 저장을 합니다.
2번은 a (+) b 와 b (+) a 방식으로 있고 이는 10의 제곱의 크기로 자릿수를 정해줍니다. pow(10, bDigit)이나 pow(10, aDigit)으로 10의 제곱의 크기을 구한 다음 a 또는 b의 정수 값을 곱하면 됩니다. 예시로 a가 9, b가 81이면, a (+) b을 하기 위해서는 a * (10^2) + b를 해서 900 + 81로 해서 981을 만드는 것입니다. 반대로 b (+) a을 하기 위해서는 b * (10^2) + a로 810 + 9로 해서 819가 나타납니다.
3번으로 마무리로 a (+) b와 b (+) a 값을 비교해서 그 중 더 큰 값을 answer로 저장하면 됩니다.
5번) 두 수의 연산값 비교하기 (언어: C++)
방금 전에 푼 문제에 마무리가 다른 문제입니다. 이번에는 a (+) b와 2 * a * b 값을 비교하면 됩니다. a (+) b는 전에 풀었던 '더 크게 합치기' 문제에 해결 방식을 풀었습니다. 2 * a * b는 사칙연산인 곱셈을 하면 쉽게 풀 수 있습니다.
총평 -
더 크게 합치기 문제가 생각보다 조금 걸렸는데 좋은 연습이였습니다. 분명 다른 방식으로 더 효율적으로 풀 수 있을테니 다른 방식으로도 풀어도 좋을 것 같습니다. 이유는 제가 만든 pow 함수가 재귀함수인데 이는 Big O notation인 시간과 공간의 복잡도가 그리 좋진 않기 때문입니다.
'알고리즘 공부 > 프로그래머스 알고리즘' 카테고리의 다른 글
코딩 기초 트레이닝 - 6일차 (C++) (0) | 2023.12.19 |
---|---|
코딩 기초 트레이닝 - 5일차 (C++) (0) | 2023.12.18 |
코딩 기초 트레이닝 - 4일차 (C++) (1) | 2023.12.15 |
코딩 기초 트레이닝 - 2일차 (C++) (0) | 2023.12.12 |
코딩 기초 트레이닝 - 1일차 (C/C++) (0) | 2023.12.11 |