본문 바로가기
코딩 깔짝

[Python] 21.07.07 : BOJ 11655

by ballena 2021. 7. 7.

BOJ 11665번(https://www.acmicpc.net/problem/11655)을 풀며.

 

 

Extended slices(https://ballenabox.tistory.com/5)에서 언급했던, '다 때려박아 놓고 꺼내쓰는' 방식을 사용해 보았다.

 

소문자 변환에 쓸 문자열 'low'와 대문자 변환에 쓸 문자열 'up'을 만들어 놓고 list.index() + 13으로 꺼내쓰는 방식이다.

 

그런데 변환이 z를 넘어 a로 돌아오게 된다면 번거로워진다. 반복문에서 처음으로 돌아오게 하기엔 코드가 더러워진다.

 

그래서 대/소문자 문자열의 z(Z)의 뒤에 a~m을 한번 더 붙였다. 그러면 z를 변환해도 처음으로 돌아갈 필요가 없다.

 

low = "abcdefghijklmnopqrstuvwxyzabcdefghijklm"
up = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLM"

 

index()메소드는 해당 리스트에서 특정 원소가 처음으로 나타나는 index를 반환하므로, 뒤에 붙여둔 a~m은 영향을 미치지 않는다.

그럼 이제 변환 과정에서 거리낄 것은 없다. 어느 알파벳을 변환하든 index()로 접근하면 된다.

 

결과를 넣을 빈 문자열에 += low/up[low/up.index('i') + 13]으로 변환해 삽입하면 끝.

.

.

.

다른 사람들(보통 더 빠르게 해결한 해법들)은 역시 파이썬다웠다.

파이썬의 ord() 함수로 알파벳을 아스키 코드로 변환한 뒤, 13을 더하고 chr() 함수로 다시 알파벳으로 변환했다.

13을 더한 결과값이 z/Z의 아스키 값을 넘겼다면 26을 빼면 된다.

내가 쓸데없이 복잡하게 했지만, 과정을 이해했다고 치자.

'코딩 깔짝' 카테고리의 다른 글

[Python] 21.07.08 : BOJ 10989  (0) 2021.07.08
[Python] 21.07.07 : 2차원 리스트의 정렬  (0) 2021.07.07
[Python] 21.07.06 : 진법 변환  (0) 2021.07.06
[Python] 21.07.06 : Extended slices  (0) 2021.07.06
[Python] 21.07.06 : map()  (0) 2021.07.06

댓글