서론
매일매일 구름톤 문제를 풀어나가고 있다. 기초적인 구현 문제가 주를 이루다보니, 이를 어떻게 풀지보단 어떻게 해볼까 라는 생각을 많이 하는 것 같다.
문제를 풀고나서 꾸며지는 캐릭터를 보는 맛도 있어, 다음주는 어떤 모습이 될지 궁금하다.
5일차 이진수 정렬
문제 요약 : 이진수로 변환시 1이 많은 수로 정렬하고 N번째 수를 답하여라(1의 개수가 같을 경우 원래 숫자의 내림차순)
새로 배운 for문 사용 방법을 사용하여 쉽게 반복문을 구현해 보았다.
배열안에 Pair로 원래 숫자와 1의 갯수를 저장하고 정렬함으로써 문제를 풀었다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int N, K;
cin >> N >> K;
vector<int> array(N);
for (auto &i : array)
{
cin >> i;
}
vector<pair<int, int>> array2(N);
int count = 0;
for (int i : array)
{
int iCopy = i;
int iCount = 0;
while (iCopy)
{
if (iCopy % 2 == 1)
{
iCount++;
}
iCopy /= 2;
}
array2[count] = {iCount, i};
count++;
}
sort(array2.begin(), array2.end(), greater<>());
int answerCounter = 1;
for (auto i : array2)
{
if (answerCounter++ == K)
cout << i.second;
}
}
배운 점
내림차순에 대해 고민하였고, algorithm에 포함된 sort() 함수에서 3번째 매개변수로 내림차순을 구현할 수 있는것을 알게 되었다.
sort(array2.begin(), array2.end(), greater<>());
느낀 점
오랜만에 이진수를 구하는 방법(2로 나누고 나머지의 나열)을 구현할 수 있어서 환기가 되었다.
처음에는 비트 마스킹과 같은 기법으로 풀 수 없을까, 해쉬 맵으로 풀순 없을까 라는 생각을 통해 문제를 푸는 방법에 대한 고찰을 통해서 분석력도 어느정도 올라갔음을 느낄 수 있었다.
vector<pair<int, int>> array2(N);
int count = 0;
for (int i : array)
{
int iCopy = i;
int iCount = 0;
while (iCopy)
{
if (iCopy % 2 == 1)
{
iCount++;
}
iCopy /= 2;
}
array2[count] = {iCount, i};
count++;
}
어려웠던 점
코드를 짜는데에 어려운 점은 없었으나, 깜빡하고 하루안에 못풀뻔 했다.
그래도 풀었으니까 된거 아닐까..?
그리고 변수를 한눈에 알아볼 수 있게 영어공부를 해야할 필요성을 글을 쓰면서 느낀다.
'코딩 공부 > TIL(Today I Learn)' 카테고리의 다른 글
구름톤 챌린지 3주차 학습 일기(1) 맞왜틀? (0) | 2023.08.29 |
---|---|
구름톤 챌린지 2주차 학습 일기(2) (0) | 2023.08.25 |
구름톤 챌린지 2주차 학습 일기(1) (0) | 2023.08.21 |
[빠른 C++][백준 15552] 빠른 A+B (0) | 2023.07.15 |
[TIL][C++] Lvalue 와 Rvalue (0) | 2023.07.12 |