https://www.acmicpc.net/problem/1427
각 자리수를 내림차순으로 정렬하는 문제이다.
그렇기 때문에 정수형으로 입력을 받는게 아니라 문자열로 입력을 받아 정렬을 하는 편이 좋다.
먼저 input으로 문자열을 입력받는다.
n=input()
형 변환을 하지 않았기때문에 기본값인 문자열로 받게된다.
이제 이를 리스트로 변환을 한다.
li=list(n)
"Hello world !"라는 문자열을 입력하고 이를 print(li)를 통해 출력을 해보면
['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', ' ', '!']
위와 같은 리스트가 출력되는 모습을 확인할 수 있다.
이를 내림차순으로 변환을 하기 위해서 sort 함수로 오름차순으로 정렬을 한 뒤 reverse로 뒤집는 방식을 택했다.
li.sort()
li.reverse()
#한 줄로 표현하면 li.sort(reverse=True)
이제 이 리스의 요소들을 합쳐서 문자열로 만들 차례이다.
사용법은
요소들 사이에 들어갈 문자.join( s for s in li)를 하면 된다.
빈 칸 없이 붙여야하므로 ''문자를 바탕으로 진행한다.
print(''.join(i for i in li))
<전체 코드>
n=input()
li=list(n)
li.sort()
li.reverse()
print(''.join(i for i in li))
이제 이 코드를 input 대신 sys 라이브러리의 sys.stdin.readline()을 사용하여 풀어보려 한다.
처음에는 input()을 바로 sys.stdin.readline()으로 바꾸어서 제출하였는데 실패를 했었다.
이유를 알아보니 input과 readline에는 입력을 받을 때 차이가 있었다.
바로 readline은 input과 다르게 마지막에 개행 문자인 '\n'이 붙는다는 점이다.
한 번 "Hello world !"를 readline으로 입력받아서 출력해보면
print(list(sys.stdin.readline()))
출력 결과
['h', 'e', 'l', 'l', ' ', 'w', 'r', 'o', 'd', ' ', '\n']
input과는 다르게 마지막에 개행 문자가 붙어있는 모습을 확인할 수 있다.
그래서 이 문자를 제거하기 위해 문자열의 strip이라는 메소드를 사용한다.
strip의 인자로 제거하고 싶은 문자를 넣어주면 자동으로 이 문자를 리스트에서 제거해준다.
즉 input과 동일하게 동작하도록 만들고 싶다면 개행 문자를 제거해줘야한다.
#input
s=input()
#input 위와 동일한 역할을 하는 readline
s=sys.stdin.readilne().strip('\n')
그런데 문자열이 아닌 int로 바로 형변환을 해버리면 굳이 개행 문자를 제거하지 않아도 알아서 정수로 바꿔주기 때문에 strip을 사용하지 않아도 된다.
댓글