백준 10807번 : 개수세기

2023. 8. 16. 22:26개인활동/코테

반응형
n = int(input())
num_list = list(map(int, input().split()))
v = int(input())

print(num_list.count(v))

일단 나는 이렇게 풀긴 했는데, 숏코드를 구경하던 중 도대체 어떻게 이렇게 짜는걸지 궁금한 코드가 있었다.

 

i=input;i();print(i().split().count(i()))

일단 내가 궁금했던 것을 정리해보자면

 

1. input에 괄호가 없으면 어떻게 되는가

2. i는 문자열인가

3. i()를 출력하면 무엇이 나오는가

4. 출력문에 써있는 코드는 왜 저렇게 생겼으며 어떠한 이유로 잘 돌아가는가

5. i()가 가능한 이유는 무엇인가

 

너무 궁금해져서 하나하나 서치를 해보기 시작했다.

 

1. input에 괄호가 없으면 어떻게 되는가

아니!!!! 왜 서치해도 뭐가 없는 것 같지? 일단 한글 게시글들은 쓸모가 없는 듯 하다. 공식 문서에도 별다른 언급이 없다...

i=input()
print(i())
print(i().split().count(i()))

괄호를 넣고 코드를 돌렸을 때는 다음과 같이 에러가 뜬다

빼고 돌리면 아래와같이 잘 돌아간다. 그렇다면 데이터 타입이 무엇인지 알아보고자 type을 이용해본다.

i=input
print(type(i()))
print(i().split().count(i()))​

i()는 string이라고 한다. 그런데 i()자체를 출력했을 때는 11이 나온다. 왜지? i()를 여러번 실행하면 할수록 한줄씩 읽어나가는걸까?

 

i()한번 실행할 때 맨 첫줄의 11이 읽히고, 두번째 출력문에서 split()을 해주며 두번째 줄이 읽히고 마지막 count 함수를 사용하며 i()를 실행할 때 2가 읽히는 것일까?

 

뭔가 지금으로서는 그런 것 같기도...하고...아닌 것 같기도 하고... 뭔가 명확한 근거가 없어서 의심스럽다.

 

i=input
print(type(i))
print(i().split().count(i()))

i에서 괄호를 빼보니 출력 결과는 아래와 같이 나왔다.

 

builtin_function_or_method는 또 무엇일까? 했는데 파이썬에서 바로 제공해주는 함수들을 의미한다고 한다.

 

아!!!!!!!!!! 깨달음을 얻었다.

 

input()에서 괄호가 열려있으면 바로 입력받은 것을 읽어들이지만 괄호를 열어주지 않는다면 바로 읽어들이지 않는 것으로 보인다. 그래서 i를 호출할 때마다 괄호를 이용해 한줄씩 읽어가는 것으로 파악된다.

 

2. i는 문자열인가?

위에서 확인한 것 처럼 i자체는 함수일 뿐이다. 하지만 ()를 이용해 한줄씩 읽었을 때는 string임을 확인할 수 있었다.

 

3. i()를 출력하면 무엇이 나오는가?

첫번째 줄에 있던 11이 먼저 출력된다.

 

4. 출력문에 써있는 코드는 왜 저렇게 생겼으며 어떠한 이유로 잘 돌아가는가?

사실 이 질문도 1번에서 곰곰히 생각하던 중 모두 풀려버렸다.

처음에 i()를 한번 실행하며 첫번째 줄에 필요없는 11을 날려주고,

출력문에서 i()를 한번 더 불러오며 두번째 줄을 읽어들인다.

 

그리고 마지막 count(i())를 넣어줌으로써 i에 들어있던 2라는 숫자를 꺼내 2의 개수를 카운트하게 되는 것이다.

 

5. i()가 가능한 이유는 무엇인가

이것도 1번에서 언급한 것처럼 input을 받을 때 ()를 사용하지 않았기 때문이다.

()를 사용해버리면 입력받은 값을 바로 변수에 때려넣지만 ()를 사용하지 않으면 input 함수로만 남아있게 된다.


숏코드 뜯어보는 것 꽤나 재미있는 것 같다.

 

제발~ 꾸준히 해보자~

 

 

반응형

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

백준 10813번: 공바꾸기  (0) 2023.08.20
백준 10810번: 공넣기  (0) 2023.08.20
백준 2562번: 최댓값  (0) 2023.08.19
백준 10818번: 최소, 최대  (0) 2023.08.18
백준 10871번: X보다 작은 수  (0) 2023.08.17