본문 바로가기
카테고리 없음

[백준 1427][파이썬] 소트인사이드 (문자열을 리스트로, 리스트를 문자열로 변환) (리스트에서 특정 문자 제거)

by 웅대 2023. 1. 13.
728x90
반응형

https://www.acmicpc.net/problem/1427

 

1427번: 소트인사이드

첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

각 자리수를 내림차순으로 정렬하는 문제이다.

 

그렇기 때문에 정수형으로 입력을 받는게 아니라 문자열로 입력을 받아 정렬을 하는 편이 좋다.

 

먼저 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을 사용하지 않아도 된다. 

728x90
반응형

댓글