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 |
댓글