2023. 8. 23. 00:02ㆍ개인활동/코테
student = list(range(1, 31))
l = [map(int, input()) for _ in range(28)]
print(l)
for i in l: student.remove(i); print(student.sort())
예제로 코드를 돌리면 계속 이렇게 떠서 l의 원소들을 확인해보았었다.
입력받은 각 숫자들이 들어간 것이 아닌 map object로 구성이 되어있었다.
대괄호를 이용해서 그런가 싶어서 list()로 바꾸어봐도 똑같은 결과를 가져온다.
도대체 뭘까 라고 생각하던 중 힌트가 된 글이 하나가 있다.
그러나 이전에 문제들을 풀었을 때를 곰곰히 생각해보면 이게 안될리가 없는데!!
그래서 다른 방식으로 문제를 풀었다.
student = list(range(1, 31))
for _ in range(28):
student.remove(int(input()))
print(*student)
이 방법은 성공했고... 이전의 코드보다 오히려 이게 더 짧았다.
아무래도 입력받고 제거하는 과정이 간소화되어서 그런 듯 하다.
위의 코드에서 map object가 왜 반환되지 않은 것인지 좀 알아봐야할 듯 하다.
일단 유사한 방식으로 다르게 짜본 코드들도 함께 업로드 해보자면
student = list(range(1, 31))
l = [int(input()) for _ in range(28)]
for i in l: student.remove(i)
print(*student)
student = list(range(1, 31))
for _ in range(28): student.remove(int(input()))
print(*student)
최종적으로 짧게 만들어 본 코드는 이것이다
그렇다면 다른 사람들은 얼마나 짧게 만들었을까?
저번엔 이런 문구가 있는 줄 몰랐는데 이런 문구가 눈에 띄었다.여튼 숏코드를 뜯어보자.
print(*{*map(int,open(0))}^{*range(1,31)})
일단 "^" 연산자는 비트연산자 중 하나로 XOR 연산을 수행한다.
XOR 연산은 둘중에 하나가 참일 때 참을 반환하는데, XOR에 대해 찾아보다 신기한 것을 발견했다.
(참고 자료: https://gksdudrb922.tistory.com/203)
값을 swap할 때 ^= 연산자를 이용하면 임시 변수 필요 없이 값을 swap할 수 있다고 한다.
여튼 여기서는 왜 저 연산자가 사용된 것인지 일단 앞에서부터 차근차근 봐야할 것 같다.
궁금한 점부터 정리하자
1. {} 중괄호가 사용된 이유는?
2. ^ XOR 연산자의 의미는?
1. {} 중괄호가 사용된 이유는?
흐음... 일단 중괄호의 경우에는 딕셔너리 형인데 무언가 이상하다. 혹시나 다른 형일 수 있으니 한번 테스트를 해보자.
테스트를 해보니 set 자료형이다. 집합자료형이라니 오랜만에 마주하는 것 같다.
딕셔너리의 경우 key-value가 무조건 쌍으로 존재해야 하는데 쌍으로 존재하지 않으니!! 일단 이건 확실히 아니었으나 혹시나 싶었다. 하지만 아니라는걸 알았으니 딕셔너리는 무시하고, set형으로 생각하면 될 듯하다.
(참고 자료: https://wikidocs.net/1015)
2. ^ XOR 연산자의 의미는?
일단 이 연산자는 위에서 이야기한 것처럼 둘중에 하나가 없다면 1을 반환하는 연산자이다.
일단 집합은 순서가 상관없기에 두 집합에 있는 요소들을 비교한다고 볼 수 있을 것 같다.
이때 두 집합에 모두 존재한다면 False를 반환하는 것이기 때문에 연산을 했을 때 반환값으로 사용되지 않을 것이다.
두 집합 중 하나에만 존재하는 경우, 즉 문제에서 원하는 전체 명단 중 과제를 안낸 사람을 걸러낼 수 있는 것이다.
오늘도 재미있는 하루
어제는 엠티 가서 문제를 못풀었다.
그래서 일요일에 두문제 풀었음!!
여튼 다시 오늘부터 1일 1백준
'개인활동 > 코테' 카테고리의 다른 글
백준 10811번: 바구니 뒤집기 (1) | 2023.08.24 |
---|---|
백준 3052번: 나머지 (0) | 2023.08.23 |
백준 10813번: 공바꾸기 (0) | 2023.08.20 |
백준 10810번: 공넣기 (0) | 2023.08.20 |
백준 2562번: 최댓값 (0) | 2023.08.19 |