-
[백준/C] 3052번 - 나머지Problem Solving 2022. 4. 25. 01:04
주어진 10개의 수를 42로 나눈 나머지 중 서로 다른 숫자의 개수를 세는 문제이다.
예전에 Java로도 풀어본 적이 있지만, C로 풀려고 정주행 중 문제를 다시 보니 어떻게 풀었는지 기억이 나지 않았다.
예전에 푼 것 참고해서 풀어도 되지만 다시 스스로 해보고 싶어서 고민해서 풀었다.
서로 다른 수가 몇 개 있는지 구하는 알고리즘을 어떻게 짤 것인가?
고민하다가, 먼저 나머지들을 크기 순으로 정렬하고 반복문으로 이전과 다른 수가 나올 때마다 count 변수에 1을 추가하는 식으로 풀면 되겠다고 생각했다.
#include <stdio.h> int main(){ int nums[10], temp, count=1; // 변수 선언 // 입력 값을 빈 배열에 넣고 42로 나눈 나머지로 초기화 for(int i=0;i<10;i++){ scanf("%d", &nums[i]); nums[i]%=42; } // 크기 순으로 정렬 for(int i=0;i<9;i++){ for(int j=i+1;j<10;j++){ if(nums[i]>nums[j]){ temp = nums[j]; nums[j] = nums[i]; nums[i] = temp; } } } // 정렬된 배열 내 요소를 차례로 돌며 다음 인덱스 값이 현재 값과 다를 경우 count 증가 for(int i=0;i<9;i++){ if(nums[i]!=nums[i+1]) count++; } printf("%d", count); return 0; }
예전에 Java로 어떻게 풀었는지 도무지 기억이 나지 않아 다시 찾아봤다. 과정은 다음과 같았다.
1. 42로 어떠한 수를 나눌 경우 나올 수 있는 나머지는 0~41이므로 길이 42의 배열을 만든다.
2. 10개의 수에 대해 각각을 나눈 나머지를 배열의 해당 인덱스에 대응하여 그 인덱스를 증가시킨다.
ex) 나머지가 41이면 인덱스 41번에 +1
3. 배열에서 0이 아닌 요소가 몇 개인지 센다.
같은 문제도 여러 방법으로 풀 수 있다는 게 정말 재미있다!
'Problem Solving' 카테고리의 다른 글
[백준/C] 2869번 - 달팽이는 올라가고 싶다 (0) 2022.05.12 [백준/C] 1193번 - 분수 찾기 (0) 2022.05.12 [백준/Java] 2292번 - 벌집 (0) 2022.04.03 [백준/Java] 4673번 - Self Number (0) 2022.04.03 [백준/Java] 4344번 - 평균 이상 비율 구하기 (0) 2022.03.27