3052) 나머지

 

3052

제목 : 나머지

  • 문제 : 두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.

수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

  • 입력 : 첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
  • 출력 : 첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.

열 번의 입력을 받아 1차원 배열에 저장한 뒤, 배열 내 각 원소를 42로 나눈 나머지를 배열로 받아서 유니크한 원소의 개수를 return하는 문제이다. 어차피 입력은 10번으로 정해져 있기 때문에 어떤식으로 계산하던 메모리나 시간초과가 날 일은 없을 것이니 개인의 입맛대로 풀면 된다.

코드는 다음과 같다.

import sys

data = [int(sys.stdin.readline()) for i in range(10)]
R = [i%42 for i in data]
uniqR = set(R)

print(len(uniqR))

입력 받은 10개의 수를 data에 저장하고 각 원소를 42로 나눈 나머지를 R에 저장한다. 그 뒤 uniqR을 선언하는데 이것은 R을 집합 자료형으로 변환한 것이다. set의 특징은 중복된 원소를 갖지 않는 다는 것이기 때문에 일종의 트릭으로 사용할 수 있다. 마지막으로 집합 uniqR의 길이를 return하는 것으로 마무리 지을 수 있다.