innn

3052번 : 나머지 본문

카테고리 없음

3052번 : 나머지

33삼 2022. 10. 4. 13:25

https://www.acmicpc.net/problem/3052

 

3052번: 나머지

각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.

www.acmicpc.net

 

문제

 

문제는 10개의 숫자를 입력값으로 받아 각각의 숫자를 42로 나눈 나머지 값의 모음에서 

서로 다른 나머지값(숫자)의 개수를 구하는 문제이다.

 

이때 고정된 값은 입력할 숫자의 개수 (10), 나누는 숫자 (42)이다. 

 

먼저 나는 set() 함수를 모르는 상태에서 for문으로 문제를 풀어보았다. 

 

말도 안되는 오답

 

10개의 숫자를 리스트에 넣어서, 또 이 각각을 42로 나눈 값들을 또다른 리스트에 저장했다.

그리고 그 저장된 나머지값 리스트들의 개수를 세서 2이상이면 1로 변환한다는 for ~ if문을 사용했는데,

돌아가지 않았다. 리스트를 두 개씩 만들어서 매우 복잡하고 컴파일도 안되는 답이었음.

 

코드 

 

 

정답코드는 매우 간단했는데, 

먼저 data라는 빈공간 배열을 선언해주고, 0부터 9까지의 범위만큼 int(input())으로 숫자를 받아주는 것까진 동일.

이때 for문을 끝내지 않고 data배열에 42의 나머지 값을 appen()함수로 추가해준다. 

즉 data 배열은 10개의 입력받은 숫자를 저장할 공간이 아니라. 그 숫자를 42로 나눈 값이 저장될 배열인 것.

이를 위해서 n 을 data 배열과 상관없이 그저 int(input()) 해준 것이다.

set() 함수로 중복을 삭제 시키고, 중복이 삭제된 배열의 요소 숫자는 count가 아니라 len()으로 구할 수 있다.

중복이 삭제된 배열이므로, 배열의 길이 == 요소의 개수인 셈이다.