초보 개발자의 일기
3052번 - 나머지 본문
문제
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
입력
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다.
이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
출력
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
나의 제출 - Python
이 문제는 리스트(List) 컴프리헨션과 집합(Set) 컴프리헨션을 이용하면 된다.
리스트 컴프리헨션(List comprehension)?
여러개의 변수를 생성할 때 map 함수를 사용하듯이, 간단하고 쉽게 리스트를 생성할 수 있는 방법이다.
컴프리헨션에는 리스트(List), 딕셔너리(Dictionary), 집합(Set) 컴프리헨션이 있다. 쉽고 간단하게 사용할수도 있고, 굉장히 복잡한 연산도 가능하다고 한다.
아래 링크를 참고하면 컴프리헨션 내의 중복표현, 조건문 등의 사용방법을 자세히 알 수 있다.
제출 코드
제출한 코드는 4줄로 되어있다. 집합은 중복값을 허용하지 않기 때문에 필터링용으로 사용했다.
K = [int(input()) for i in range(0,10)] # K에 입력받은 숫자 저장
K2 = [K[j]%42 for j in range(len(K))] # K2에 나머지 저장
K3 = list(set(K2)) # set(집합)을 이용하여 중복값 제거
print(len(K3)) # len(K3) : 요소 개수 출력
수정한 코드
수정한 코드는 2줄로 되어있다. 리스트 컴프리헨션과 집합 컴프리헨션을 사용하여 작성했다.
리스트는 대괄호[]로 표시하고, 집합은 중괄호{}로 표시한다. 또한 집합 컴프리헨션으로 생성된 객체도 집합의 특성을 지니고 있기 때문에 중복값을 허용하지 않는다. 따라서 중복값은 제외하여 저장하게 되고, len으로 요소의 개수를 출력해주었다.
K = [int(input()) for i in range(0,10)] # List comprehension
print(len({K[j]%42 for j in range(len(K))})) # Set comprehension
'열공일기 > 코딩연습' 카테고리의 다른 글
4673번 - 셀프 넘버 (0) | 2021.05.14 |
---|---|
8958번 - O,X 퀴즈 (0) | 2021.05.11 |
1110번 - 더하기 사이클 (0) | 2021.05.08 |
10871번 - X보다 작은 수 (0) | 2021.05.07 |
11021번 - A+B - 7 (0) | 2021.05.06 |