반응형

📝 문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/120839
📝 문제 설명
가위(2), 바위(0), 보(5)를 각각 이길 수 있는 손으로 변환하는 문제입니다.
🔹 변환 규칙
- 2(가위) → 0(바위)
- 0(바위) → 5(보)
- 5(보) → 2(가위)
주어진 문자열을 위의 변환 규칙에 따라 변환해야 합니다.
✅ 해결 방법
1️⃣ 리스트 컴프리헨션 + join() 사용 (추천)
def solution(rsp):
win_map = {'2': '0', '0': '5', '5': '2'}
return "".join(win_map[ch] for ch in rsp)
✅ 가장 간결하고 빠른 방법 🚀
- win_map[ch]을 리스트로 변환 후 join()을 사용하여 문자열로 결합
- 코드가 직관적이며 가독성이 뛰어남
2️⃣ for 루프 + 문자열 추가 (+= 연산)
def solution(rsp):
win_map = {'2': '0', '0': '5', '5': '2'}
result = ""
for ch in rsp:
result += win_map[ch]
return result
✅ 직관적인 방법이지만 비효율적 ❌
- += 연산을 사용하여 문자열을 반복적으로 추가하면 성능이 저하될 수 있음
3️⃣ map() 함수 사용
def solution(rsp):
win_map = {'2': '0', '0': '5', '5': '2'}
return "".join(map(lambda ch: win_map[ch], rsp))
✅ map()을 활용한 방법
- lambda를 활용하여 변환을 수행
- 리스트 컴프리헨션과 유사한 성능이지만, 가독성이 다소 떨어질 수 있음
4️⃣ translate() 함수 사용 (가장 효율적)
def solution(rsp):
trans = str.maketrans("205", "052")
return rsp.translate(trans)
✅ 가장 빠른 방식 중 하나 🚀
- str.maketrans()를 이용하여 변환 규칙을 설정한 후, translate() 함수로 변환
- 메모리 사용량이 적고 가장 효율적인 방식
5️⃣ replace() 연속 호출 (비추천)
def solution(rsp):
return rsp.replace("2", "x").replace("0", "y").replace("5", "z").replace("x", "0").replace("y", "5").replace("z", "2")
❌ 여러 번 replace() 호출로 인해 성능 저하
- 각 문자를 중간 단계(x, y, z)로 변경 후 최종 변환
- 가독성이 낮고 비효율적이므로 추천하지 않음
🚀 결론: 가장 좋은 방법은?
방법 가독성 성능 추천 여부
리스트 컴프리헨션 (join()) | ✅ 매우 좋음 | ✅ 빠름 | ⭐⭐⭐⭐ |
for 루프 (+=) | ✅ 직관적 | ❌ 느림 | ⭐⭐ |
map() 함수 사용 | ❌ 다소 복잡 | ✅ 빠름 | ⭐⭐⭐ |
translate() 활용 | ✅ 간결 | ✅ 매우 빠름 | ⭐⭐⭐⭐ |
replace() 연속 호출 | ❌ 길고 복잡 | ❌ 비효율적 | ⭐ |
📌 가장 추천하는 방법:
1️⃣ translate() 활용 (rsp.translate(trans)) ✅
2️⃣ 리스트 컴프리헨션 ("".join(win_map[ch] for ch in rsp)) ✅
반응형
'IT > CodingTest' 카테고리의 다른 글
[programmers] 'OX퀴즈' 문제를 가장 간단하게 푸는 방법 (0) | 2025.03.27 |
---|---|
[programmers] '영어가 싫어요' 문제 해설 및 정답코드 (0) | 2025.03.25 |
[programmers] '삼각형의 완성조건(2)' 문제 해설 및 정답코드 (0) | 2025.03.25 |
[programmers] '공 던지기' 문제 해설 및 정답코드 (0) | 2025.03.20 |
[programmers] '2차원으로 만들기' 문제해설 (0) | 2025.03.18 |
[programmers] '주사위의 개수' 문제해설 (0) | 2025.03.17 |
[programmers] '외계행성의 나이' 문제 간단하게 풀기 (1) | 2025.02.27 |
[programmers] '최빈값 구하기' 문제 쉽게 풀어보기 (0) | 2025.02.22 |
댓글