반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- GirlsInICT해커톤
- map
- 코드캠프
- props.key
- Erricson
- 백준
- 자바스크립트
- Unmounting
- 15721
- react
- getDerivedStateFromProps
- javascript
- 에릭슨엘지
- js
- 훈훈한자바스크립트
- ts
- Baekjoon
- 이미지스캔
- filter
- next
- Girls_In_ICT
- props
- React.js
- 객체인지
- BOJ
- Bestawards
- nodejs
- typescript
- axios
- dataFetching
Archives
- Today
- Total
민희의 코딩일지
[PYTHON] 백준 4446 ROT13 본문
반응형
https://www.acmicpc.net/problem/4446
4446번: ROT13
간달프는 여러 종족의 언어를 꽤 오랜 시간 동안 공부했다. 최근에 간달프는 해커들이 사용하는 언어인 ROT13을 공부했다. 이 언어는 영어와 문법이 같지만, 알파벳의 순서를 어떤 규칙을 이용해
www.acmicpc.net
이 문제 완전 어이없다. 함정이 숨어있다.
풀이
모음과 자음 목록을 list로 만들어준다.
charisLower: 현재 알파벳이 소문자이면 True
대문자라면 소문자로 바꿔주고 알파벳을 ROT13에 맞게 바꿔준 후 다시 대문자로 바꿔준다.
처음 시도를 했는데 틀렸습니다가 떴다.
틀린 코드는 다음과 같다.
# 백준 4446번 ROT13
string = input()
vowels = ["a", "i", "y", "e", "o", "u"]
consonats = ["b", "k", "x", "z", "n", "h", "d", "c", "w", "g", "p", "v", "j", "q", "t", "s", "r", "l", "m", "f"]
ans = ""
for char in string:
charisLower = True
if char.isupper():
charisLower = False
char = char.lower()
if (char in vowels):
changeChar = vowels[(vowels.index(char)+3) %6]
ans += changeChar if charisLower else changeChar.upper()
elif (char in consonats):
changeChar = consonats[(consonats.index(char)+10) %20]
ans += changeChar if charisLower else changeChar.upper()
else:
ans += char
print(ans)
그래서 다른 사람 풀이를 찾아봤는데 입력이 엄청 많이 들어가기 때문에 while로 무한 반복에 try except를 써야 정답 처리가 된다는 걸 알게 되었다. 그래서 무한 반복을 추가해주었더니 드디어 통과했다.
코드
# 백준 4446번 ROT13
# 함정: 입력은 여러 줄로 이루어져 있다. 각 줄은 100글자 이내의 문장이고,
# ROT13으로 쓰여진 문장이다. 이 문장의 각 글자는 ASCII 문자 공백(32) 부터 ~(126)까지이다.
vowels = ["a", "i", "y", "e", "o", "u"]
consonats = ["b", "k", "x", "z", "n", "h", "d", "c", "w", "g", "p", "v", "j", "q", "t", "s", "r", "l", "m", "f"]
while(True):
try:
string = input()
ans = ""
for char in string:
charisLower = True
if char.isupper():
charisLower = False
char = char.lower()
if (char in vowels):
changeChar = vowels[(vowels.index(char)+3) %6]
ans += changeChar if charisLower else changeChar.upper()
elif (char in consonats):
changeChar = consonats[(consonats.index(char)+10) %20]
ans += changeChar if charisLower else changeChar.upper()
else:
ans += char
print(ans)
except:
break
참고
https://devlibrary00108.tistory.com/54
[백준][Python] 4446 ROT12
처음엔 ord chr 쓰는줄 알았는데 도저히 그쪽으론 설계가 안돼서 노가다로 풂. 문제 함정은 testcase는 하나 띡 놓고 실상은 입력이 겁나 많이 들어간다는 것. 때문에 while로 무한 반복에 try except까지
devlibrary00108.tistory.com
반응형
'자료구조, 알고리즘 > 파이썬' 카테고리의 다른 글
[백준] 17276 - 배열 돌리기 (0) | 2024.07.06 |
---|---|
[백준] 15469 - N과 M (1) (0) | 2024.07.06 |
[PYTHON] 백준 15721 번데기 (0) | 2023.02.04 |
[PYTHON] 백준 14247 나무자르기 (0) | 2023.01.26 |
[PYTHON] 백준 2346 풍선 터트리기 (0) | 2023.01.15 |
Comments