일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 개발/Java/Spring
- 개발/네트워크
- ai
- 카카오테크캠퍼스
- 개발/컴퓨터네트워크
- 개발/webrtc
- 카테캠
- 개발/MySQL
- AI/GPT
- 개발/CS/OS
- 알고리즘
- 대외활동/카카오테크캠퍼스
- 개발/Java
- ⌨️Developer
- 개발/환경
- ⌨️Developer/보안
- AI/ML
- 개발/OOP
- 개발/에러
- 개발/언어론
- 개발/언어/Java
- 취업
- electron
- 개발/CS/알고리즘
- 카카오 테크 캠퍼스
- 개발/보안
- 개발/Electron
- 개발/Tools/프레임워크/Spring
- 개발
- 개발/프레임워크&라이브러리
Archives
- Today
- Total
봄수의 연구실
CodingTest 감 살리기 with Programmers - 9일차 본문
CodingTest 감 살리기 with Programmers
- 코딩 테스트를 준비 하게 되어서, 기본적인 문법도 되짚고, 감을 되찾기 위해 시작합니다
숫자 문자열과 영단어
from collections import deque
def solution(s):
answer = 0
n=[i for i in range(10)]
en = {0:"zero",1:"one",2:"two",3:"three",4:"four",5:"five",6:"six",7:"seven",8:"eight",9:"nine"}
for i in range(10):
n[i]=i
jump=0
number = []
s = deque(s)
while s:
idx = s.popleft()
if idx=="z":
jump = 3
number.append("0")
elif idx=="o":
jump=2
number.append("1")
elif idx=="s":
if s[0]=="e":
jump=4
number.append("7")
else:
jump=2
number.append("6")
elif idx =="e":
jump=4
number.append("8")
elif idx=="n":
jump=3
number.append("9")
elif idx=="f":
if s[0]=="i":
jump=3
number.append("5")
else:
jump=3
number.append("4")
elif idx=="t":
if s[0]=="w":
jump = 2
number.append("2")
else:
jump=4
number.append("3")
else:
number.append(idx)
if jump>0:
for j in range(jump):
s.popleft()
jump=0
return int(''.join(number))
- 바로 풀면 위와 같이 직접 분기해서 풀어도 되지만 비효율적이다
- 핵심 아이디어는 문자 하나씩 빼서 매칭하는 숫자를 저장하고, 숫자의 영어 이름 길이만큼 pass 한다
def solution(s):
en = {"zero": "0", "one": "1", "two": "2", "three": "3", "four": "4", "five": "5", "six": "6", "seven": "7", "eight": "8", "nine": "9"}
number = []
word = ""
for c in s:
if c.isnumeric():
number.append(c)
else:
word += c
if word in en:
number.append(en[word])
word = ""
return int(''.join(number))
[카카오 인턴] 키패드 누르기
def solution(numbers, hand):
p = {1:"L",4:"L",7:"L",3:"R" ,6:"R" ,9:"R",0:"x",2:"x",5:"x",8:"x"}
idx = {}
cnt=1
left=[3,0]
right=[3,2]
for i in range(4):
for j in range(3):
if i==3 and j == 1:
idx[0]=[i,j]
else:
idx[cnt] = [i,j]
cnt+=1
answer = ''
for n in numbers:
if p[n]=="x":
l= abs(left[0]-idx[n][0])+abs(left[1]-idx[n][1])
r=abs(right[0]-idx[n][0])+abs(right[1]-idx[n][1])
if l>r:
right = idx[n]
answer+="R"
elif l<r:
left = idx[n]
answer+="L"
else:
if hand=="right":
right = idx[n]
answer+="R"
else:
left = idx[n]
answer+="L"
else:
answer+=p[n]
if p[n]=="L":
left = idx[n]
else:
right= idx[n]
return answer
- 핵심 아이디어는 숫자 키패드의 인덱스를 미리 저장해두고 거리를 계산하는 것이다. (0은 예외처리 꼭 해주자)
728x90
'알고리즘 풀이' 카테고리의 다른 글
CodingTest 감 살리기 with Programmers - 11일차 (0) | 2023.03.20 |
---|---|
CodingTest 감 살리기 with Programmers - 10일차 (0) | 2023.03.19 |
CodingTest 감 살리기 with Programmers - 8일차 (0) | 2023.03.16 |
CodingTest 감 살리기 with Programmers - 7일차 (0) | 2023.03.15 |
CodingTest 감 살리기 with Programmers - 6일차 (1) | 2023.03.14 |