BeakJoon/Python

[Python] 백준 #9086번 : 문자열

쿼딩~ 2023. 9. 29. 21:20

조건

  • 첫 번째 줄에는 테스트 케이스의 개수를 입력받는다
  • 두 번째 줄 부터 문자열을 입력받고 문자열의 처음 문자와 맨 끝 문자를 출력한다

코드


#테스트 케이스의 개수를 입력받음
T = int(input())

#테스크 케이스 개수 만큼 for문으로 반복함
for _ in range (T):
    #문자열 str을 입력받음
    str = input()
    #문자열의 첫 번째 문자와 맨 끝 문자를
    # 인덱스 0과 인덱스 -1 (==맨 끝)로 접근해서 각각 다른 함수에 저장
    first_char_str = str[0]
    last_char_str = str [-1]
    #각각 다른 함수에 저장한 문자들을 '+'를 이용해 띄어쓰기 없이 한 줄로 출력
    print(first_char_str + last_char_str)

 - 위 코드는 내가 제출한 코드 -


import sys

T = int(sys.stdin.readline())

for _ in range (T):
    str = sys.stdin.readline()
    first_char_str = str[0]
    last_char_str = str [-1]
    print(first_char_str,end="")
    print(last_char_str,end="")

 
- 위 코드는 내가 오류가 났던 코드 -


오류가 났던 이유 :

  • "sys.stdin.readline()"을 사용해서 입력 받았기 때문
  • print()에서 end="" 을 사용해서 붙여서 출력했기 때문

이 문제를 풀면서 겪은 어려움

- 이 문제를 풀 때 나는 처음에 빠른 속도를 위해서 "import sys"로 불러와서 "sys.stdin.readline()"으로 입력받으려고 했는데, 이렇게 입력을 받으니 맞게 짠 코드인데도 이상하게 작동이 되는 것이다.
그래서 원인을 찾아보니 두 함수가 입력받는 기능을 똑같이 하긴 하지만 입력을 받는 대상이 다르기 때문에 생긴 문제였다.
자세한 내용은 모르지만 input()함수는 입력을 사용자에게 받고, sys.stdin.readline()함수는 스트림에서 입력을 읽기 때문이라고 한다.


알게된 점

  • input()과 sys.stdin.readline() 두 함수는 똑같이 입력을 받는 역할을 하지만 입력을 받는 대상이 다르기 때문에 완전히 똑같은 역할을 하는 함수는 아니라고 볼 수 있다
  • sys.stdin.readline()함수는 속도가 빠르지만 input()을 써야하는 코드에서 오류가 날 수 있기 때문에 빠른 컴파일 속도가 필요한 알고리즘이 아니면 쓰지 않는게 좋겠다
  • 문자열에서 맨 끝 문자에 접근하기 위해서는 list[-n]과 같은 '-'가 붙은 인덱스를 사용하면 인덱스 번호를 거꾸로 접근하기 때문에 편리하다