본문 바로가기
  • Let's study

PS56

[C++] 백준 2292번: 벌집 1. 벌집의 개수 num는 1, 6, 12, 18... 6의 배수로 늘어난다. 2. 각 벌집은 6의 배수로 늘어나므로 1, 2~7, 8~19... 순으로 증가하는데 이를 이용한다. 3. 따라서 입력받은 숫자가 어느 벌집의 범위에 해당하는 지 알면 최단거리의 방 개수를 알 수 있다. num은 주위 벌집의 개수이므로 cnt * 6, 이후 cnt++ range는 6의 배수로 늘어나는 벌집의 범위, 따라서 num을 더해주면서 늘려간다. #include using namespace std; int main(void) { int n; cin >> n; int cnt = 1; long long num = 1; // 주위 숫자 개수 long long range = 1;//주위 숫자 중 최대 수 while (range .. 2020. 12. 26.
[C++] 백준 2839번: 설탕 배달 1. 5로 나누어 떨어지면 그 갯수를 센다 2. 그렇지 않다면 3을 한 번 빼고 cnt++ 3. 이 때 설탕이 0보다 작아지면 5와 3으로 정확하게 N 킬로그램을 만들 수 없다는 것이므로 cnt=-1 #include using namespace std; int main(void) { int n; cin >> n; int cnt = 0; while (n > 0) { if (n % 5==0) { cnt += n / 5; n %= 5; } else { cnt++; n -= 3; } if (n < 0) { cnt = -1; break; } } cout 2020. 12. 26.
[C++] 백준 7568번: 덩치 1. pair 형태로 몸무게랑 키를 vector에 저장, score는 등수 저장 변수로 모두 1로 초기화 2. 벡터의 모든 요소를 하나하나 비교하면서 자신보다 몸무게와 키 둘 다 큰 다른 요소랑 비교할 경우 등수++ 3. 등수 출력 #include #include using namespace std; int main(void) { int n; cin >> n; vectorv; int score[51]; for (int i = 0; i > a >> b; v.push_back(make_pair(a,b)); score[i] = 1; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i == j).. 2020. 12. 23.
[C++] 백준 2231: 분해합 1. 가장 작은 생성자를 구해야 하므로 1부터 더해나간다. 2. sum은 생성자와 생성자의 각 자리수 합을 모두 더한 변수, p는 각 자리수의 합을 구하기 위한 변수 3. p가 0이 될때까지 각 자리수의 합을 구하고 sum에 추가 4. sum==n 이면 i를 출력하고 실행을 끝낸다. 5. 만약 4번 조건에 걸리지 않는다면 생성자가 없는 것이므로 0을 출력한다. #include using namespace std; int main(void) { int n; cin >> n; int sum;//전체 합 int p;//각 자리수 for (int i = 1; i 0) { sum += p % 10; p /= 10; } if (sum == n) { .. 2020. 12. 23.
[C++] 백준 2798번: 블랙잭 1. 3개를 뽑아야 하니 i는 0부터 n-2번까지, j는 i+1부터 n-1번까지, k는 j+1부터 n까지 뽑는 경우의 수를 반복한다. 2. 이때 각각 뽑은 수를 다 더했을 때 그 값이 딜러가 외친 숫자보다 작거나 같고 이전 값보다 크다면 값을 재설정 해준다. #include using namespace std; int main(void) { int n, m; cin >> n >> m; int arr[101]; int result = 0; for (int i = 0; i > arr[i]; } for (int i = 0; i < n - 2; i++) { for (int j = i + 1; j < n - 1; j++) { for (int k = j + 1; k < n; k++) .. 2020. 12. 23.
[C++] 백준 1316번: 그룹 단어 체커 list 배열로 알파벳이 나왔던 건지 판단 1. 입력받은 str배열의 이전 위치와 현재 위치의 값이 다르다면 list 배열의 str[j-1]-'a' 에다가 1을 넣어준다. (-'a'로 str이 문자배열이지만 숫자로 변경하여 저장가능) 2. 이때 만약 list 배열의 str[j]-'a' 에 저장된 값이 1이라면(이미 나온 적이 있음) flag=1로 바꿔주고 break로 반복문을 빠져나온다. 3. 반복문을 빠져나왔을 때 flag==0이라면(그룹단어임) 개수를 ++해준다. #include #include using namespace std; int main() { int list[26] = { 0, }; int n; cin >> n; int cnt = 0; for (int i = 0; i < n; i++) {.. 2020. 12. 8.