[Python] 백준 3052 | 나머지

heige·2023년 11월 29일
0

BOJ

목록 보기
1/46
post-thumbnail

문제

https://www.acmicpc.net/problem/3052

풀이

방법 1 : set() 함수 이용

n = []
for _ in range (10) :
    n.append(int(input()) % 42)
n = set(n)
print(len(n))

set()함수를 사용하면 쉽게 풀어낼 수 있다. set() 함수 사용법을 몰랐는데 알게 되었다.
set은 집합을 의미하여, 집합에는 중복되는 숫자가 존재하지 않는 것처럼 set함수에서도 중복되지 않은 원소들만 들어갈 수 있다.
중복되지 않은 항목의 개수를 구하기 위해서 set함수의 길이를 구해주면 된다.

c.f set()함수는 중복된 값을 뺄 수 있으나, 순서가 뒤죽박죽이 된다. 이 문제에서는 순서대로 출력할 필요가 없으므로 사용가능하다.

방법 2 : for문 2개 활용

n = []
rem = [0 for _ in range(42)]
cnt = 0
for i in range(10) :
    n.append(int(input()))
    rem[n[i]%42] += 1

for i in range(42) :
    if (rem[i] != 0) :
        cnt += 1
print(cnt)

문제 푸는 새로운 시각을 얻었다!
42의 나머지는 0~41이기에 42개의 '0'을 가지는 리스트를 만든다.
그리고 10개의 수를 입력 받으며 42로 나눈 나머지를 구하고, rem 리스트에서 해당하는 나머지의 값을 1씩 추가한다.
또다른 for문을 이용해 rem 리스트 중 0이 아닌 항목을 세면 중복 없이, 다른 나머지를 갖는 수를 셀 수 있다.


💡 개념 정리

Set

1. Set(집합) 이란

  • set은 수학에서 이야기하는 집합과 비슷하다.
  • 순서가 없고, 집합안에서는 unique한 값을 가진다.
  • 그리고 mutable 객체이다.
  • 중괄호를 사용하는 것은 dictionary와 비슷하지만, key가 없이 값만 존재합니다.
>>> s = {3, 5, 7}
>>> s
{3, 5, 7}
>>> type(s)
<class 'set'>

2. Set(집합) 선언

  • list나 dict의 경우 대괄호나 중괄호로 선언할 수 있었지만, set은 dict타입과 동일한 중괄호를 사용하므로, 중괄호만으로는 생성할 수 없다.
  • set 생성자를 이용한다.
>>> s = {}
>>> type(s)
<class 'dict'>
>>> s = set()
>>> type(s)
<class 'set'>
>>> s
set()
  • 중복된 값은 자동으로 중복이 제거 된다.
>>> s = {1, 5, 1, 1, 1, 3, 7}
>>> s
{1, 3, 5, 7}
profile
웹 백엔드와 클라우드 정복을 위해 탄탄한 기반을 쌓아가고 있는 예비개발자입니다. 'IT You Up'은 'Eat You Up'이라는 표현에서 비롯되어, IT 지식을 끝까지 먹어치운다는 담고 있습니다.

0개의 댓글