def solution(priorities, location):
wait_list = priorities.copy()
importance = 0
idx = [i for i in range(len(priorities))]
while True:
if wait_list[importance] < max(wait_list[importance+1:]):
wait_list.append(wait_list.pop(importance))
idx.append(idx.pop(importance))
else:
importance += 1
if wait_list == sorted(wait_list, reverse = True):
break
answer = idx.index(location) + 1
return answer
< 풀이 과정 >
문제 내 주어진 priorities 리스트이 고정된 인덱스를 유지하기 위해 idx라는 리스트를 생성했고, 리스트 내 뒤의 값이 더 크면 뒤로 이동시켜줘야하는 과정을 거치기 위해 고정된 priorities를 두고, copy() 함수로 새로운 대기목록을 생성해준다.
from collections import Counter
def solution(str1, str2):
answer = 0
str1 = str1.upper()
str2 = str2.upper()
s1 = []
s2 = []
for i in range(len(str1)-1):
if str1[i:i+2].isalpha():
s1.append(str1[i:i+2])
for i in range(len(str2)-1):
if str2[i:i+2].isalpha():
s2.append(str2[i:i+2])
if len(s1) == 0 and len(s2) == 0:
return 65536
c1 = Counter(s1)
c2 = Counter(s2)
intersection = len(list((c1 & c2).elements()))
union = len(list((c1 | c2).elements()))
answer = int(intersection / union * 65536)
return answer
< 풀이 과정 >
collections 라이브러리의 Counter 모듈을 처음 사용하여 문제를 풀이하였다.
def solution(phone_book):
answer = True
phone_book.sort()
for i in range(len(phone_book)-1):
if phone_book[i] in phone_book[i+1]:
answer = False
break
return answer
< 풀이 과정 >
phone_book 리스트를 sorting한 이후, 앞 번호가 뒤 번호에 포함될 경우 False를 출력하는 코드를 작성했으나, 효율성은 다 통과하고 13번 테케에서 실패가 떠버렸다.
아래와 같이 phone_book[i+1]:len(phone_book[i])] 으로 변경하여 문제를 해결하였다.
def solution(phone_book):
answer = True
phone_book.sort()
for i in range(len(phone_book)-1):
if phone_book[i] in phone_book[i+1][:len(phone_book[i])]:
answer = False
break
return answer
생각해보니 그냥 단순히 phone_book[i] in phone_book[i+1]인 경우, 번호가 다른 번호의 접두어가 아닌 경우도 있다. 예를 들면 ['4', '54', '6']의 경우를 보면 접두어가 아니기에 True로 출력되어야 한다.
1. 주어진 입력 phone_book을 sort()오름차순 정렬해준다.
2. for 문을 돌려 phone_book 내 앞 인덱스가 뒤 인덱스[:앞인덱스 길이]로 존재한다면, False를 리턴하도록 한다.