목록2단계 (21)
N

간단하게 풀 수 있는 문제다..! 우선 while문으로 계속 반복한다. a = (a / 2) + (a % 2) b = (b / 2) + (b % 2) 를 넣어주도록 한다. 그러면 이겼을 때 다음 라운드에서 받을 수 있는 차례가 나오게 된다. 만약 a와 b가 같다면 현재 라운드에서 만나는 것이므로 answer을 리턴해주면 끝..! #include using namespace std; int solution(int n, int a, int b) { int answer = 0; while(1) { a = (a / 2) + (a % 2); b = (b / 2) + (b % 2); answer++; if(a == b) return answer; } }

우선 처음에 answer에는 [0, 0]을 넣어주도록 하자. 만약 모든 단어가 규칙에 맞게 끝말잇기를 했다면 [0, 0]을 바로 리턴하기 위함이다. 그리고 첫 단어는 check에 넣어주었다. 이제 1번째 인덱스의 단어부터 끝까지 단어를 탐색하도록 한다. turn과 count 는 선언 시 1로 초기화 하였기 때문에, 순서에 맞게 +1 씩 해주면 된다. for문 설명) 우선 turn++을 하여 차례를 세도록 한다. 그리고 words[i]의 첫 번째 글자와 words[i - 1]의 마지막 글자가 일치하는지 검사한다. 일치하지 않으면 바로 break를 하여 빠져나오고, 일치한다면 check 벡터에 단어가 있는지 검사한다. 만약 check 벡터에 단어가 없으면 check에 넣어주도록 한다. 단, 마지막 단어일 때..

문제는 길지만 막상 풀어보면 쉬운 문제다..! 우선 max = 가져갈 수 있는 폰켓몬의 수이므로 nums.size() / 2를 넣어준다. 그리고 같은 종류는 가져가지 않도록 check[200001] = {false, }로 하여 체크하도록 한다. for문으로 answer == max 일 때까지 반복한다. 만약 check[nums[i]] == false라면 처음 가져가는 폰켓몬의 종류이므로 answer++을 해주고, 해당하는 종류 번호를 true로 바꿔주면 끝..! #include #include using namespace std; int solution(vector nums) { int answer = 0, max = nums.size() / 2; bool check[200001] = {false, };..

연속된 숫자들의 합이 n과 같으면 answer++을 해주면 된다..! 우선 start = 1 을 선언해준다. start로 연속된 숫자의 시작을 알 수 있도록 하기 위함이다. 이제 while문으로 start

문자열로 들어온 값 중에서 최댓값과 최솟값을 찾아야 한다. 우선 문자열을 int 형태로 바꿔줘야 한다. 그리고 공백 문자를 제외하고 숫자만 가져와야 하기 때문에 token을 이용하여 문자열을 나누었다. for문이 token을 이용하여 공백을 제외하고 숫자만 받아와 int 형태로 v벡터에 넣어주고 있는 부분이다. 모든 숫자를 가져왔으면 sort()를 통해 오름차순으로 정렬을 해준다. 그러면 v.front()는 최솟값, v.back()은 최댓값이 되므로 to_string()으로 int를 string형태로 바꿔주고 알맞게 answer에 넣어주면 끝..! #include #include #include #include #include using namespace std; string solution(string..

벡터를 정렬하여 최솟값을 만드는 문제..! 우선 A와 B 벡터를 오름차순과 내림차순으로 정렬한다. 내림차순으로 정렬할 때에는 desc() 함수를 이용하도록 하였다. 그리고 각각의 자리에 있는 값을 곱하여 answer에 누적시키면 끝..! 추가적으로 sort()를 내림차순으로 만들 때, sort(B.rbegin(), B.rend())를 사용하여도 된다! rbegin()과 rend()는 역방향 반복자다..! #include #include #include using namespace std; bool desc(int a, int b) { return a > b; } int solution(vector A, vector B) { int answer = 0; sort(A.begin(), A.end()); sor..

문자열의 대소문자를 변환해주는 toupper()와 tolower() 함수를 이용하였다. toupper()는 대문자로, tolower()는 소문자로 변환해준다..! 해당 문자가 알파벳인 경우 알맞게 변환해주고, 알파벳이 아닌 경우는 문자 그대로 리턴되기 때문에 이 특징을 살려서 함수를 사용하였다. 그리고 문자의 위치를 나타내는 index를 선언하였고, index가 0인 경우는 대문자로 변환해준다. 우선 s.size()만큼 반복하자. s[i]가 공백인지 아닌지를 검사해야 한다. 공백은 그대로 넣어주고, 공백 다음 문자는 JadenCase이기 때문에 index = 0으로 바꿔준다. 만약 공백이 아니라면 해당 문자는 알파벳이다. 그러면 index를 검사하여 0인지 아닌지 판단한다. 0이면 toupper(s[i]..

최대 공약수를 이용하여 최소 공배수를 구하는 방식을 사용하였다. gcd(최대 공약수) 함수와 lcm(최소 공배수) 함수를 정의하였다. for문을 돌면서 arr[i]와 arr[i + 1]의 최소 공배수를 구하여 arr[i + 1]에 다시 넣어주었다. 그래야 다음 최소 공배수를 구할 수 있기 때문이다..! arr.size() - 1 만큼 반복하면 N개의 최소 공배수를 구할 수 있다..! #include #include #include using namespace std; int gcd(int a, int b) { int c; while(b != 0) { c = a % b; a = b; b = c; } return a; } int lcm(int a, int b) { return a * b / gcd(a, b)..