백준 3052번

2025. 1. 23. 13:27백준

이번엔 내가 알게된 것부터 적어볼려고 한다.
일단 객체는 * 언패킹이 된다 ex. map, range, list, set, ...
그리고 generator는 언패킹이 안된다 ex. [ i for i in rage(1, 31) ],...

a, = itterator 를 하면 각각의 요소가 a에 리스트의 형식으로 저장되지만 *a = itterator를 하면 오류가 발생한다.
왜 그런가 했는데 *를 사용할려면 리스트나 튜플의 형태여야 한다.
근데 a하나로는 리스트도 튜플도 아닌다.
그래서 a뒤에 ,를 찍어주면 오류가 안난다. *쉼표를 찍어주면 튜플로 취급함

문제

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

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

입력

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

출력

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

나의 풀이

print(len({i%42 for i in map(int,open(0))}))

값을 입력받고 그 값을 for문을 이용해서 받은 후 42로 나눠주고 set하면 중복되지 않은 값만 있을테니 그걸 세어준다.
다들 나와 같은 방식으로 풀었기에 다른사람의 풀이는 생략스 한다.

|https://0xffffffff.tistory.com/77

a, *b = 'X'                     # a = 'X', b = []
*a, b = 'X'                     # a = [], b = 'X'
a, *b, c = "XY"                 # a = 'X', b = [], c = 'Y'
a, *b, c = "WXYZ"               # a = 'W', b = ['X', 'Y'], c = 'Z'
*a = 1                          # ERROR - *의 연산자로 대입할 변수는 list나 tuple 형태여야 한다.
*a = (1, 2)                     # ERROR - *의 연산자로 대입할 변수는 list나 tuple 형태여야 한다.
*a, = (1, 2)                    # a = [1, 2]
*a, = 1                         # ERROR - int형은 iterable이 아니다.
*a, = [1]                       # a = [1]
*a = [1]                        # ERROR - *의 연산자로 대입할 변수는 list나 tuple 형태여야 한다.
*a, = (1, )                     # a = [1]
*a, = (1)                       # ERROR - int형은 iterable이 아니다.

*a, b = [1]                     # a = [], b = 1
*a, b = (1, )                   # a = [], b = 1

(a, b), c = 1, 2, 3             # ERROR - unpacking하기에 변수가 너무 많다
(a, b), *c = 1, 2, 3            # ERROR - int형은 iterable이 아니다.
(a, b), *c = 'ab', 2, 3         # a = 'a', b = 'b', c = [2, 3]

(a, b), c = 1, 2, 3             # ERROR - unpacking하기에 변수가 너무 많다.
*(a, b), c = 1, 2, 3            # a = 1, b = 2, c = 3

*(a, b) = 1, 2                  # ERROR - *의 연산자로 대입할 변수는 list나 tuple 형태여야 한다.
*(a, b), = 1, 2                 # a = 1, b = 2

*(a, b) = "AB"                  # ERROR - *의 연산자로 대입할 변수는 list나 tuple 형태여야 한다.
*(a, b), = "AB"                 # a = 'A', b = 'B'

*(a, b) = "ABCD"                # ERROR - *의 연산자로 대입할 변수는 list나 tuple 형태여야 한다.
*(a, b),  = "ABCD"              # ERROR - unpacking하기에 변수가 너무 많다.
*(a, *b), = "ABCD"              # a = 'A', b = ['B', 'C', 'D']

*(a, *b), c = "ABCD"            # a = 'A', b = ['B', 'C'], c = 'D'

*(a, *b),  = 1, 2, 3, 4, 5, 6   # a = 1, b = [2, 3, 4, 5, 6]

*(a, *b), *c = 1, 2, 3, 4, 5, 6 # ERROR - 두 개 이상의 * 연산자가 존재하면 안 된다.
*(a, *b), (*c, ) = 1,2,3,4,5    # ERROR - int형은 iterable이 아니다.
*(a, *b), c = 1, 2, 3, 4, 5, 6  # a = 1, b = [2, 3, 4, 5], c = 6
*(a, *b), (*c, ) = 1,2,3,4,"AB" # a = [1], b = [2, 3, 4], c = ['A', 'B']

*(a, *b), c, d = 1, 2, 3, 4, 5, 6, 7    # a = 1, b = [2, 3, 4, 5], c = 6, d = 7
*(a, *b), (c, d) = 1, 2, 3, 4, 5, 6, 7  # ERROR - int형은 iterable이 아니다.
*(a, *b), (*c, d) = 1, 2, 3, 4, 5, 6, 7 # ERROR - int형은 iterable이 아니다.
*(a, *b), *(c, d) = 1, 2, 3, 4, 5, 6, 7 # ERROR - 두 개 이상의 * 연산자가 존재하면 안 된다.

*(a, b), c = "AB", 3                    # ERROR - unpack을 위하여 1개 이상의 변수가 필요하다.
*(*a, b), c = "AB", 3                   # a = [], b = "AB", c = 3
(a, b), c = "AB", 3                     # a = "A", b = "B", c = 3

*(a, b), c = "AB", 3, 4                 # a = "AB", b = 3, c = 4
*(*a, b), c = "AB", 3, 4                # a = ["AB"], b = 3, c = 4
(a, b), c = "AB", 3, 4                  # ERROR - unpacking하기에 변수가 너무 많다.

*는 묶는 역할도 하는데 이러한 역할 덕에 가변인수로 함수의 인자에 튜플의 형식으로 값을 여러개 넣을 수 있다.
ex. def func(*args):

반응형

'백준' 카테고리의 다른 글

백준 10138번  (0) 2025.01.23
백준 5597번  (0) 2025.01.23
백준 1546번  (0) 2025.01.23
백준 2562번  (0) 2025.01.23
백준 10951번  (0) 2025.01.23