안녕하세요. 지난 포스팅의 BOJ 2577번 : 숫자의 개수에서는 1차원 배열을 이용하여 문제를 해결해보았습니다. 이번에도 동일한 문제를 풀어보도록 하죠.
핵심 포인트
- 반복문
- 1차원 배열 : 리스트 자료형
제출 코드
numbers = [int(input()) for _ in range(10)]
count = [0] * 42
for number in numbers :
if count[number % 42] == 0 :
count[number % 42] += 1
print(sum(count))
해설
문제의 입력은 한 줄에 한 개씩 숫자를 입력받습니다. 따라서, 반복문을 이용해서 하나 씩 입력을 받은 뒤 이를 숫자 배열에 담아주면 되겠죠. 파이썬에서는 이러한 리스트를 만드는 데 더욱 짧은 코드를 만들 수 있게 도와줍니다. 이를 리스트 압축(list compression)이라고 합니다.
numbers = []
for _ in range(10) :
numbers.append(int(input()))
원래는 위와 같이 코드를 짜야하지만 리스트 압축을 이용해서 제출 코드의 첫번째 줄과 같이 작성할 수 있습니다. 이를 통해 더욱 간단하게 코드를 짤 수 있죠. 다음으로 count 변수는 각 숫자를 42로 나누었을 때 나머지를 저장하기 위한 변수입니다. 42로 나누기 때문에 0부터 41까지 총 42개의 나머지가 나올 수 있기 때문에 42개의 데이터를 저장하는 리스트로 선언을 하였습니다.
기본적인 아이디어는 숫자를 담은 리스트인 numbers에서 number를 하나씩 불러와서 42로 나눈 나머지를 count 변수에 +1 형태로 저장하게 됩니다. 즉, 해당 인덱스가 0이면 인덱스에 해당하는 숫자의 나머지가 아직 나오지 않았다는 뜻이죠. 이때, 문제의 조건은 서로 다른 나머지의 개수입니다. 즉, 10개의 숫자를 42로 나누었을 때 나머지가 모두 0이 나온다면 출력값은 0이 되어야합니다. 따라서, 중복을 피하기 위해서 해당 인덱스의 숫자가 0일 경우에만 갱신하고 그렇지 않으면 건들지 않습니다. 마지막으로 반복문을 전부 순회하게 되면 10개의 숫자를 42로 나누었을 때 나머지가 count 변수에 전부 저장됩니다. 이를 sum 함수를 이용해서 리스트인 count 변수 안의 원소의 합을 계산하게 됩니다. 이를 통해서 서로 다른 나머지의 개수를 출력할 수 있습니다.
참고자료 및 그림출처
'Programming > Coding Problem' 카테고리의 다른 글
BOJ 8958번 : OX퀴즈 (0) | 2022.06.12 |
---|---|
BOJ 1546번 : 평균 (0) | 2022.06.12 |
BOJ 2577번 : 숫자의 개수 (0) | 2022.06.11 |
BOJ 2562번 : 최댓값 (0) | 2022.06.10 |
BOJ 10818번 : 최소, 최대 (0) | 2022.06.09 |