문제
두 자연수 A와 B가 있을 때, A% B는 A를 B로 나눈 나머지이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
정답코드
arr = []
for i in range(10):
a = int(input())
if a%42 not in arr:
arr.append(a % 42)
print(len(arr))
풀이
- 리스트를 선언한다.
- 10번을 돌리면서 입력 a를 받는데,
- 만약 입력받은 a값을 42로 나눈 나머지가 arr안에 없을 시
- a을 42로 나눈 나머지들을 arr안에 저장한다.
- 그리고 arr안에 저장된 요소들의 개수를 센다.
- 사실 중복제거는 .set() 으로도 가능하다.
느낀 점
일단 내가 처음에 풀었던 코드는 다음과 같다. 풀고 나서 되게 좋아했었는데, 간략한 정답코드를 보니 아직 갈 길이 한참 멀었다는 게 새삼 느껴진다.
lista = []
listb = []
cnt = 0
for i in range(10):
a = int(input())
lista.append(a)
for n in range(len(lista)):
b = lista[n] % 42
lista[n] = b
for i in range(0, 43):
if i in lista:
if i not in listb:
listb.append(i)
cnt += 1
print(cnt)
- 먼저 리스트 2개를 선언해주고, 리스트 요소의 개수를 셀 변수 cnt를 지정해 줬다.
- lista 안에 10번 반복하여 차례대로 입력을 받는다.
- lista 의 요소를 차례대로 42로 나누어 lista에 다시 집어넣는다.
- 42로 나눈 나머지들이 뭐가 있을까 생각해 보니 0부터 41까지의 값을 가진다는 것을 깨달았고,
- 그 값들 중 필요한 것들을 다음과 같은 조건문으로 걸러냈다:
- 해당 값이 lista안에 존재할 것
- 만약 존재한다면 listb안에는 중복으로 존재하지 않을 것
- 위 조건에 만족한다면
- 해당 값을 listb에 집어넣고(추후 일어날 중복방지용)
- cnt값을 1증가시킬 것.
- 끝
'Algorithm > baekjoon' 카테고리의 다른 글
[백준] 1546번 평균 파이썬 (python) (0) | 2024.03.11 |
---|---|
[백준] 10811번 바구니 뒤집기 파이썬 (python) (0) | 2024.03.11 |
[백준] 10813번 공 바꾸기 파이썬 (python) (0) | 2024.03.10 |
[백준] 10810번 공 넣기 파이썬 (python) (0) | 2024.03.10 |
[백준] 2562번 최댓값 파이썬 (python) (0) | 2024.03.10 |
댓글