백준 10818번: 최소, 최대

2023. 8. 18. 20:45개인활동/코테

i = input; i()
num_list = list(map(int, i().split()))
print(min(num_list), max(num_list))

실화인가...

처음에 min이랑 max 순서 반대로 적어서 틀려버렸다.

 

앞에 풀었던 두문제보다 이 코드가 실행 시간이 좀 오래 걸려서 당황스러웠지만..

쉽게 성공했다.

 

숏코드를 보고있는데 시간이 나보다 오래걸리지만 코드 길이가 더 짧은 코드들이 있었다.

 

내장함수를 사용해서 그런걸까?

 

그렇다면 가장 짧은 숏코드를 보자

print(min(s:=[*map(int,[*open(0)][1].split())]),max(s))

또 open 함수가 사용되었다. 

 

궁금한 점부터 정리를 해보자.

 

1. ":="는 무엇인가?

2. "s:="로 사용된 이유는 무엇인가?

3. *map은?

 

숏코드에서 자주 사용되는 유형들을 보다보니 궁금한 것이 점점 적어지게 된다.

 

일단 1번부터 훑어보자

 

1. ":="는 무엇인가?

python 3.8부터 등장한 연산자로 바다코끼리 연산자라고 부르며 대입 연산자라고 한다.

(참고: https://docs.python.org/ko/3/whatsnew/3.8.html)

 

이 연산자의 목적은 표현식에 이름을 부여하고 재사용할 수 있도록 한다.

(참고: https://int-i.github.io/python/2020-05-29/python-walrus-operator/)

 

따라서 이 코드에서는 s라는 변수에 뒤에있는 표현식의 결과값을 대입한 것이라고 할 수 있다.

print(min(s:=[*map(int,[*open(0)][1].split())]),max(s))

그리고 s라는 변수를 max에서 재사용한 것이다.

 

2. "s:="로 사용된 이유는 무엇인가?

이 질문은 1번에서 해결이 되었다.

 

3. *map은?

또 * 이 아이가 나타났다.

그리고 어떤 분이 정리해주신 글을 찾게되었다. (참고: https://jammdev.tistory.com/39)

이름도 알았다.

Asterisk, 애스터리스크, 별표, *

 

ㅇㅋ 뇌에 각인시킴

 

print(min(s:=[*map(int,[*open(0)][1].split())]),max(s))

여기서 일단 unpacking을 위해서 사용된 것은 알겠다.

그 뒤에 open에서도 unpacking을 위해 사용된 것은 알겠는데...

사실 *map보다 궁금한 것은 [] 대괄호를 사용한다고 해서 list로 들어가는가 싶었는데...

 

unpacking을 했기에 그 요소들이 list의 요소들로 들어가는 것이였다.

 

unpacking을 안한 상태로 대괄호로 씌워넣으면 아래와 같은 결과값이 나왔다.

(내가 짠 코드를 기준으로 한 것이다. )

i = input; i()
num_list = [map(int, i().split())]
print(min(num_list), max(num_list))

 


재미있다

업데이트 된 연산자도 알아가고

asterisk의 사용법도 점점 익혀가는 것 같다.

 

다음엔 asterisk를 사용해 코드를 짜봐야겠다.

'개인활동 > 코테' 카테고리의 다른 글

백준 10813번: 공바꾸기  (0) 2023.08.20
백준 10810번: 공넣기  (0) 2023.08.20
백준 2562번: 최댓값  (0) 2023.08.19
백준 10871번: X보다 작은 수  (0) 2023.08.17
백준 10807번 : 개수세기  (0) 2023.08.16