문제
Z 대학교 학생은 입학할 때 학번을 받게 된다. 학번은 0보다 크거나 같고, 10^6 - 1 보다 작거나 같은 정수이다. Z 대학의 김상근 교수는 학번으로 학생들을 구분한다. 상근이는 학생들을 조금 더 쉽게 기억하기 위해서 자신이 가르치는 학생들의 학번을 m으로 나누었을 때, 나머지가 모두 다른 가장 작은 양의 정수를 찾으려고 한다.
입출력 예시
입력: 첫째 줄에 테스트 케이스의 개수 N이 주어진다. 각 테스트 케이스의 첫째 줄에는 상근이가 가르치는 학생의 수 G가(1 ≤ G ≤ 300) 주어진다. 다음 G개 줄에는 학생의 학번이 한 줄에 하나씩 주어진다. 학번이 같은 경우는 없다.
출력: 각 테스트 케이스마다, 학번을 m으로 나눈 나머지가 모두 다른 가장 작은 정수 m을 출력한다.
예제입력1)
2
1
124866
3
124866
111111
987651
예제출력1)
1
8
코드
a = int(input()) # 테스트 케이스 수 입력
for _ in range(a): # 테스트 케이스 수 만큼 반복
nums = list() # 학번을 저장할 리스트 생성
stu_num = int(input()) # 학생의 수 입력
for _ in range(stu_num): # 학생 수 만큼 반복
nums.append(int(input())) # 학번 입력 후 리스트에 저장
k = 1 # 나누는수 1부터 시작
while True: # 조건 충족시까지 무한반복
result = set() # 학번을 k로 나눈 나머지가 서로 다 달라야 하기 때문에 set자료형을 이용.
# set자료형은 중복값이 존재하지 않는다는 특징이 있어 중복 여부 확인에 용이함.
for n in nums: # 학번을 하나씩 가져와서
result.add(n % k) # k로 나눈 나머지를 result에 추가
if len(result) == stu_num: break # 만약 result의 원소 개수가 stu_num과 같다면 반복 종료
else: k += 1 # 그게 아니라면 k를 1 증가시키고 반복
print(k) # k값 출력
실행 화면
채점 결과
728x90
'문제 풀이 > [BaekJoon]' 카테고리의 다른 글
[BaekJoon] 1002번 터렛 (Silver 3) - Python (1) | 2022.12.22 |
---|---|
[BaekJoon] 1074번 Z (Silver 1) - Python (0) | 2022.12.21 |
[BaekJoon] 11724번 연결 요소의 개수 (Silver 2) - Python (0) | 2022.12.20 |
[BaekJoon] 11726번 2×n 타일링 (Silver 3) - Python (0) | 2022.12.18 |
[BaekJoon] 9095번 1, 2, 3 더하기 (Silver 3) - Python (0) | 2022.12.17 |