def solution(phone_book):
answer = True
# 전화번호부 해시 생성
hashmap = {}
for phone_num in phone_book:
hashmap[phone_num] = 1
# 접두사 찾기
for phone_num in phone_book:
tmp = ''
for num in phone_num:
tmp += num
# 하나씩 입력한 전화번호의 번호가 해쉬맵에 있고 자기 자신 번호가 아닐 때
if tmp in hashmap and tmp != phone_num:
answer = False
return answer
풀이 1
해시 문제라 해시로 풀이했다.
전화번호를 해시 맵에 입력해주고,
한 사람의 전화번호의 번호를 tmp에 저장하고 hashmap에 있는 전화번호와 비교하며 자기 자신인 경우를 제외한다.
def solution(phone_book):
answer = True
pbook = sorted(phone_book)
for a,b in zip(pbook, pbook[1:]):
if b.startswith(a):
return False
return answer
def solution(participant, completion):
# 정렬
participant.sort()
completion.sort()
for i,j in zip(participant, completion):
if i!=j:
return i
return participant[-1]
def solution(numbers, hand):
answer = ''
left_finger = 10 # 왼손 처음 * 위치
right_finger = 12 # 오른손 처음 #위치, 0은 11로 변경하기
for n in numbers:
if n in [1,4,7]: # 왼손 영역
answer += 'L'
left_finger = n
elif n in [3,6,9]: # 오른손 영역
answer += 'R'
right_finger = n
else: # 2 5 8 0 일 때
if n == 0: # 0은 11로
n = 11
# 왼손과 오른손과 눌러야 할 n 거리를 각각 구해준다.
left_dis = abs(n-left_finger)
right_dis = abs(n-right_finger)
left_dis = left_dis//3 + left_dis%3
right_dis = right_dis//3 + right_dis%3
# print("l",left_dis)
# print("r",right_dis)
if left_dis == right_dis: # 눌러야 할 거리가 왼손 오른손이 같으면 손잡이대로
if hand == "right": # 오른손 잡이는 오른손
answer += 'R'
right_finger = n
if hand == "left": # 왼손 잡이는 왼손
answer += 'L'
left_finger = n
elif left_dis < right_dis: # 왼손과 거리가 더 가까우면 왼손
answer += 'L'
left_finger = n
else: # 오른손이 더 가까우면 오른손
answer += 'R'
right_finger = n
return answer
풀이 1
2, 5, 8, 0 일 때 거리를 구하는 것에서 쫌 헷갈렸다.
처음에 abs(현재 손가락//3 -눌러야 할 손가락//3) + abs(현재 손가락%3 -눌러야 할 손가락%3) 이렇게 풀었더니 틀려서 규칙을 다시 찾았다.
abs(현재 손가락-눌러야 할 손가락)를 먼저 구해주고
이 값에서 3으로 나눈 값과 3으로 나눈 나머지를 더해줘서 비교해야 하는 것이었다.
def solution(numbers, hand):
answer = ''
left_finger = '*' # 왼손 처음 * 위치
right_finger = '#' # 오른손 처음 #위치
phone_num = {1 : (0,0), 2 : (0,1), 3 : (0,2),
4: (1, 0), 5: (1, 1), 6: (1, 2),
7: (2, 0), 8: (2, 1), 9: (2, 2),
'*': (3, 0), 0: (3, 1), '#': (3, 2)}
for n in numbers:
if n in [1,4,7]: # 왼손 영역
answer += 'L'
left_finger = n
elif n in [3,6,9]: # 오른손 영역
answer += 'R'
right_finger = n
else: # 2 5 8 0 일 때
# 왼손과 오른손과 눌러야 할 n 거리를 각각 구해준다.
cur = phone_num[n]
left_cur = phone_num[left_finger]
right_cur = phone_num[right_finger]
left_dis = abs(cur[0]-left_cur[0]) + abs(cur[1]-left_cur[1])
right_dis = abs(cur[0]-right_cur[0]) + abs(cur[1]-right_cur[1])
if left_dis == right_dis: # 눌러야 할 거리가 왼손 오른손이 같으면 손잡이대로
if hand == "right": # 오른손 잡이는 오른손
answer += 'R'
right_finger = n
if hand == "left": # 왼손 잡이는 왼손
answer += 'L'
left_finger = n
elif left_dis < right_dis: # 왼손과 거리가 더 가까우면 왼손
answer += 'L'
left_finger = n
else: # 오른손이 더 가까우면 오른손
answer += 'R'
right_finger = n
return answer
def solution(new_id):
answer = ''
# 1단계 모든 대문자를 소문자로
new_id = new_id.lower()
id_must = ['-','_','.']
# 2단계 알파벳 소문자, 숫자, 필요한 기호 빼고 삭제
for i in new_id:
if i in id_must or i.isalpha() or i.isdigit():
answer += i
# 3단계 연속된 . 하나의 .로
cnt = 0
for i in answer:
if i == id_must[2]:
cnt += 1
if cnt == 2:
answer = answer.replace("..", ".")
cnt = 0
# 4단계 .가 처음이나 마지막이면 제거
if answer[0] == id_must[2]: # 처음
if len(answer)>1: # 지울게 있어야 지움
answer = answer[1:]
else:
answer = '.'
if answer[-1] == id_must[2]: # 마지막
answer = answer[:-1]
# 5단계 빈 문자열이라면 a삽입
if answer == "":
answer += 'a'
# 6단계 아이디 길이가 16자리 이상이면, 첫 15개 제외한 나머지 문자 제거
if len(answer) >= 16:
answer = answer.replace(answer[15:],"")
if answer[-1] == id_must[2]: # 제거 후 마지막에 .이 있다면 제거
answer = answer[:-1]
# 7단계 아이디 길이가 2자 이하면 마지막 문자를 길이가 3될 떄까지 반복
while len(answer) < 3:
answer += answer[-1]
# print(answer)
return answer
풀이
문자열 단계별 구현만 해주면 된다.
참고로 3단계는 이렇게 while 문으로도 가능하다.
while '..' in answer:
answer = answer.replace('..', '.')
def solution(s):
word = ['zero','one','two','three','four','five','six','seven','eight','nine']
answer = ""
alp = ""
for i in s:
if i.isdigit(): # 숫자인지
answer += i
else:
alp += i
if alp in word:
answer += str(word.index(alp))
alp = ""
return int(answer)
풀이 1
숫자면 그냥 답에 추가해준다.
숫자가 아니라면 영문자 문자열에 넣다가 word에 저장해둔 값과 같은 값이 나온다면 word의 인덱스를 답에 넣어주고 영문자 리셋 ""한다.
def solution(s):
words = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
for i in range(len(words)):
s = s.replace(words[i], str(i))
return int(s)
def solution(lottos, win_nums):
ranking = [6, 6, 5, 4, 3, 2, 1] # 순위가 인덱스인 일치하는 개수 배열
cnt = 0 # 당첨 개수
for i in lottos:
if i in win_nums:
cnt += 1
count0 = lottos.count(0) # 0 의 개수
return [ranking[cnt+count0], ranking[cnt]]