2023. 8. 17. 11:43ㆍ개인활동/코테
i = input
n, x = i().split()
num_list = list(i().split())
for i in num_list:
if int(x) > int(i): print(i, end=' ')
정수형으로 변환을 안해주니 10도 포함이 되었다. 그래서 if문에서 정수형으로 사용을 해주었는데...
아니 왜 10이 포함되는거지? 이해가 안된다.
a = str(10)
b = str(5)
if b > a:
print(b)
else:
print(a)
심지어 이렇게 테스트를 해보았다. 문자열로 넣으면 뭐가 달라지나 싶어서...
근데 결과가 이게 나옴...
뭘까?
i = input
n, x = i().split()
num_list = list(i().split())
for i in num_list:
if x > i: print(i, end=' ')
왜 이렇게 했을 때는 예시를 아래 이미지처럼 넣으면 10이 포함이 되는걸까...?
왜?!?!?!?!?! if문에서 x와 i를 int형으로 변환해주지 않으면 10이 왜 포함되는 것인가?
일단 문자열을 비교연산하게되면 아스키코드로 변환하여 본다고 한다. 그렇다면 '5'와 '10'의 아스키코드를 확인해보자.
https://ko.rakko.tools/tools/74/
이진 번역기 / 변환기 : 이진, 십진, 헥사, 아스키 코드 및 일반 텍스트 | RAKKOTOOLS🔧
이진수, 10 진수, 16 진수, ASCII 숫자 및 텍스트 간 변환
ko.rakko.tools
이 사이트를 이용해 확인해보았다.
10을 10으로 보는게 아니라 1과 0으로 보았기 때문에 이런 결과가 나온 듯 하다.
이런 멍청한 자식!
그러면 이제 숏코드 분석을 시작해보자.
n,x,*a=map(int,open(0).read().split())
for i in a:i<x!=print(i)
가장 짧은 파이썬 코드를 가지고 왔다.
일단 궁금한 것부터 정리해본다.
1. open(0)은 무엇인가?
2. open(0).read()를 하면 어떻게 되는 것인가?
3. *a 와 a의 차이는 무엇인가?
4. i < x != print(i)는 무엇인가?
1. open(0)은 무엇인가?
https://stackoverflow.com/questions/53898231/integer-file-descriptor-0-in-open
Integer File Descriptor "0" in open()
In Python 3, it is possible to open a file object using an "integer file descriptor" with the format: stdout = open(1, "w") stdout.write("Hello World") # Prints Hello World stdout.close() Though,
stackoverflow.com
구글링을 해보던 중 백준에서 어떤분이 질문을 올린 것이 있었다. 그 답글로 이 링크가 함께 첨부되서 참고해보았다.
읽다보니 file descriptor가 뭔지 모르겠어서 이것부터 집고 넘어간다.
File Descriptor란?
- 리눅스, 유닉스 계열 시스템에서 프로세스가 파일을 다룰 때 사용하는 개념
- 일반적으로 0이 아닌 정수값을 가짐
- 프로세스 실행 중 파일을 열면 해당 프로세스의 FD 숫자 중 사용하지 않는 가장 작은 값 할당
- 이후 프로세스가 열려있는 파일에 시스템 콜을 이용해 접근할 때 FD값을 이용해 파일을 지칭
- 0은 Standard Input(stdin), 1은 Standard Output(stdout) 2는 Standard Error(stderr)
(https://twofootdog.tistory.com/51)
음.. 뭔가 알듯 말듯 하다.
여튼 파일 경로 대신 open(FD) 이렇게 들어갈 수 있다는 것이고, input을 받는 0을 넣어준 것이다.
2. open(0).read()를 하면 어떻게 되는 것인가?
오픈한 파일을 바로 읽어들이고 split()하여 각 변수에 할당해준다.
3. *a 와 a의 차이는 무엇인가?
*a는 입력값이 여러개인 경우 사용하는 방식이였다.
a는 split()된 값 하나를 입력받지만 *a를 사용하면 split()된 남은 입력값들을 모두 받는 것이다.
구체적인 용어로는 packing이라고 한다고 한다.
입력받은 여러개의 값을 하나의 객체로 합쳐서 받도록 하는 것이다.
https://www.acmicpc.net/board/view/90354
4. i < x != print(i)는 무엇인가?
조건식 뒤에 !=는 왜 붙는걸까?
내가 아는 !=의 의미는 다르다의 의미였는데 다른 의미가 있는지 먼저 찾아본다.
다른 의미가 없는 것 같은데...
도대체 무슨 의미인거지?!?!?!?!
pycharm으로 코드를 돌려보면 출력이 안되어서 결과를 보지 못하는 상황
제발 아는 사람은 저에게 힌트를 주고 가셨으면 좋겠습니다.
백준에 물어보고 싶은데 아직 질문을 못쓰는 것 같음...
마지막 질문을 해결하지 못한 것이 너무 슬프지만...
좀더 고민해봐야겠다.
'개인활동 > 코테' 카테고리의 다른 글
백준 10813번: 공바꾸기 (0) | 2023.08.20 |
---|---|
백준 10810번: 공넣기 (0) | 2023.08.20 |
백준 2562번: 최댓값 (0) | 2023.08.19 |
백준 10818번: 최소, 최대 (0) | 2023.08.18 |
백준 10807번 : 개수세기 (0) | 2023.08.16 |