나머지
문제는 다음과 같습니다.

제목이 나머지인 만큼 뭔가 나머지로 독립적인 요소의 개수만 카운트 하는 것 같습니다.
문제를 요약하자면 42로 나누었을 때 나머지 중 겹치지 않은 수의 개수 입니다.
그렇다면 입력값을 42로 나누었을 때의 값들이 서로 다른 몇 개의 값이 있는지 출력하는 것 입니다.
저의 알고리즘은 다음과 같습니다.
입력은 10개로 고정되어 있습니다. 따라서 입력을 받음과 동시에 42로 나누고 나머지를 새로운 리스트에 넣습니다.
이 작업을 10번 반복합니다. 그렇다면 리스트에서는 입력값을 42로 나눈 나머지의 값들이 중복해서 들어가거 있거나 중복되지 않게끔 들어가 있을 것 입니다. 여기서 중복만 제거한다면? 저희가 원하는 결과를 얻을 수 있습니다.
그렇다면 여기서 어떻게 해야 할까요? 일일이 딕셔너리를 생성해서 카운트가 2인 경우를 제외하고 나머지의 개수만큼 카운트 해야 할까요? 사실 더 단순하게 접근할 수 있습니다. 바로 set() 활용하는 것 입니다. set()는 순서가 없고 중복을 제거 해주는 역할을 합니다. 따라서 이 받은 list()에 set() 로 묶어 개수를 출력하는 것이 바로 정답입니다. 또 다른 방식으로는 애초에 set() 로 할당을 해주면 됩니다.
L = []
for _ in range(10):
A = int(input())
L.append(A%42)
print(len(set(L)))
다음으로 다른 사람들의 공개된 코드를 확인해보겠습니다.

이 코드를 제외하고는 저와 비슷한 논리의 알고리즘으로 코딩을 했습니다.
이 코드는 제가 위에서 언급한 애초에 set()로 입력을 받는 방식입니다. 리스트 컴프리헨션에서 [] -> {} 처리 해준다면 애초에 set() 형식으로 처리 됩니다. 하나 하나 값을 전달하면서 결국 나머지 값을 set() 로 전달하게 되고 set()는 계속 해서 중복을 제거하며 처리합니다. 따라서 set()의 길이는 문제가 요구하는 출력 기대값이 됩니다.
'BaekJoon Reivew' 카테고리의 다른 글
단계별로 풀어보기 백준_5597번 (0) | 2025.03.21 |
---|---|
단계별로 풀어보기 백준_10813번 (0) | 2025.03.20 |
단계별로 풀어보기 백준_10810번 (0) | 2025.03.19 |
단계별로 풀어보기 백준_2562번 (0) | 2025.03.18 |
단계별로 풀어보기 백준_10818번 (0) | 2025.03.18 |