[BOJ] 3052. 나머지 (C,Python3)
- 코딩 초보. 구현을 목표로 해서 코드가 비효율적일 수 있습니다.
3052. 나머지
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
1.C99
#include <stdio.h>
main() {
int a[10];
int b[42];
int result=0;
for (int i = 0; i < 10; i++) {
scanf("%d", &a[i]);
a[i] = a[i] % 42;
}
for (int i = 0; i < 42; i++) {
b[i] = 0;
}
for (int i = 0; i < 10; i++) {
int k = a[i];
if (b[k] == 0) {
result++;
b[k] = 1;
}
}
printf("%d", result);
}
처음에 생각해낸 방법은 scanf()를 통해 각각 값들을 입력받아 42로 나눈 나머지를 a라는 배열에 저장한 후, b라는 배열에 그 값들을 저장한다. (단, 이미 b 배열에 저장된 경우에는 저장하지 않도록. 그래야 서로 다른 수를 셀 수 있으니까) 그리고 b 배열의 길이를 구하는 방법을 하려고 했는데... 무슨 이유에선지 이러면 반례가 생겨버린다. 그래서 다른 방식으로 구현하고자 했다.
42라는 수로 나누면 나머지는 0~41이므로 배열크기가 42인 int형 배열 b를 만들어서 해당하는 나머지 (인덱스)가 있으면 1로 만들어주고 그와 동시에 result 값을 증가시키도록 했다. (중복되는 값이 동시에 카운트되지 않도록 b 배열에 0이 있을때에만 result를 증가시키도록 한다. )
2.Python
lst=[]
chk=[]
result=0
for i in range(10):
k=int(input())
lst.append(k%42)
for j in range(42):
chk.append(0)
for i in range(10):
k=lst[i]
if(chk[k]==0):
result+=1
chk[k]=1
print(result)
같은 방식으로 구현했다.
'💻STUDY > BOJ' 카테고리의 다른 글
[BOJ] 1259. 펠린드롬수 (C,Python3) (0) | 2022.01.16 |
---|---|
[BOJ] 10809. 알파벳 찾기 (C,Python3) (0) | 2022.01.16 |
[BOJ] 2908. 상수 (C,Python3) (0) | 2022.01.15 |
[BOJ] 2577. 숫자의 개수 (C, Python3) (0) | 2022.01.14 |
[BOJ] 1546. 평균 (C, Python3) (0) | 2022.01.14 |
댓글