개발자 되기/코딩테스트

[백준/python] 3052번

발전하는 개발자 2023. 12. 10. 22:45
728x90
반응형

나머지 

문제

두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 

수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

입력

첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.

출력

첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.

예제 입력 1 복사

1
2
3
4
5
6
7
8
9
10

예제 출력 1 복사

10

각 수를 42로 나눈 나머지는 1, 2, 3, 4, 5, 6, 7, 8, 9, 10이다.

예제 입력 2 복사

42
84
252
420
840
126
42
84
420
126

예제 출력 2 복사

1

모든 수를 42로 나눈 나머지는 0이다.

예제 입력 3 복사

39
40
41
42
43
44
82
83
84
85

예제 출력 3 복사

6

각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.

 

풀이

방법)

빈배열 생성
반복문으로 10개의 수를 입력받기
입력받은 값을 42로 나누기
배열에 나머지 값을 추가(중복 제외)
배열 길이 출력
-> 배열에 중복된 값이 제외되었으므로 서로 다른 나머지가 몇 개인지 알 수 있음

 

1) not in 사용

입력받은 값을 42로 나눈 나머지가 binnom이라는 배열에 들어있지 않다면 추가하여 binnom의 길이를 출력

# 빈 리스트 binnom을 생성합니다. 
binnom = []
# for 루프를 사용하여 10번 반복합니다.
for i in range(10):
    # 각 반복에서 사용자로부터 정수를 입력받습니다.
    a = int(input())
    # 입력받은 정수를 42로 나눈 나머지를 구하여 변수 b에 저장합니다.
    b = a % 42
    # 만약 b가 리스트 binnom에 이미 존재하지 않는다면 (if b not in binnom:), 즉 중복된 값이 아니라면 해당 나머지 값을 리스트 bin에 추가합니다.
    if b not in binnom:
        binnom.append(b)
# 10번의 반복이 끝나면 리스트 bin에는 10개의 정수에 대한 42로 나눈 나머지 중에서 중복을 제외한 유일한 값들이 저장됩니다.
# 리스트의 길이를 출력하여 유일한 값들의 개수를 확인합니다.
print(len(binnom))

 

2) set 사용 : set은 중복× 순서×, list에 값을 추가할 땐 append, set에 값을 추가할 땐 add

입력받은 값을 42로 나눈 나머지를 배열에 추가하고, 그 값을 set이라는 배열에다가 담아 중복을 없앤 값의 길이를 출력

 

  2-1) 처음엔 list에 담았다가 set으로 담아서 중복을 제거하는 경우

# 빈 리스트 binnom을 생성합니다.
binnom = []
# for 루프를 사용하여 10번 반복합니다.
for i in range(10):
    # 각 반복에서 사용자로부터 정수를 입력받습니다.
    a = int(input())
    # 입력받은 정수를 42로 나눈 나머지를 구하고
    b = a % 42
    # 그 값을 리스트 bin에 추가합니다.
    binnom.append(b)
    # 10번의 반복이 끝나면 리스트 bin에는 10개의 정수에 대한 42로 나눈 나머지가 저장됩니다.
# 리스트를 집합(set)으로 변환하여 중복을 제거한 후, 그 집합의 크기를 출력합니다.
print(len(set(binnom)))


 2-2) 처음부터 set에 담는 경우

# 빈 집합 binnom을 생성합니다.
binnom = set()
# for 루프를 사용하여 10번 반복합니다.
for i in range(10):
    # 각 반복에서 사용자로부터 정수를 입력받습니다.
    a = int(input()) 
    # 입력받은 정수를 42로 나눈 나머지를 구합니다.
    b = a % 42
    # 나머지 값을 집합 binnom에 추가합니다. 집합은 중복을 허용하지 않기 때문에 중복된 값은 자동으로 제거됩니다.
    binnom.add(b)

# 10번의 반복이 끝나면 binnom에 남아 있는 유일한 값들의 개수를 출력합니다.
print(len(binnom))

 

* List, Set, Dictionary, Tuple의 차이점

List Set Dictionary Tuple
  • 가장 일반적으로 사용되는 데이터 타입 중 하나입니다.
  • 순서가 있으며, 인덱스를 사용하여 원소에 접근할 수 있습니다.
  • 원소를 추가, 제거, 변경할 수 있는 가변(mutable)한 데이터 타입입니다.
  • 대괄호 []를 사용하여 생성됩니다.
  • 순서가 없고, 중복된 값을 허용하지 않습니다.
  • 원소 간에 순서가 없으므로 인덱스로 접근할 수 없습니다.
  • 집합 연산(합집합, 교집합 등)에 유용한 데이터 타입입니다.
  • 중괄호 {}나 set()을 사용하여 생성됩니다.
  • 키(key)-값(value) 쌍으로 이루어진 데이터 타입입니다.
  • 순서가 없으며, 각 키는 유일해야 합니다.
  • 키를 사용하여 값을 검색하고, 키와 값을 추가, 변경, 제거할 수 있습니다.
  • 중괄호 {}를 사용하여 생성되며, 키와 값은 콜론 :으로 구분됩니다.
  • 순서가 있고, 변경이 불가능한(immutable) 데이터 타입입니다.
  • 한 번 생성되면 원소를 추가, 제거, 변경할 수 없습니다.
  • 괄호 ()나 tuple()을 사용하여 생성됩니다.
  • 주로 데이터의 불변성을 유지하고자 할 때 사용됩니다.
my_list = [1, 2, 3, 4]
my_set = {1, 2, 3, 4}
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
my_tuple = (1, 2, 3, 4)

 

728x90
반응형