728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
테스트케이스 파악이 어려운 빡센 구현 문제다.
나도 히든테케 파악을 못해서 계속 40점, 50점, 60점 이렇게 나오다가
결국 풀이에 있는 테케를 보고 풀었다.
풀이 코드
# 네오가 기억한 멜로디 m이 방송된 곡 melody에 있으면 true, 없으면 false를 리턴하는 함수
# C와 C#을 구분해야 함
def is_m_in_melody(m, melody):
melody = "".join(melody)
if m in melody:
temp = melody.replace(m, '1')
if '1#' in temp:
real_temp = temp.replace('1#', '')
# '1#'도 있고 '1'도 있는 경우에는 True임
if '1' in real_temp:
return True
else:
return False
else:
return True
else:
return False
# 음악이 틀어진 시간을 리턴해주는 함수
def get_playing_time(start, end):
start_hour, start_minute = map(int, start.split(":"))
end_hour, end_minute = map(int, end.split(":"))
return (end_hour * 60 + end_minute) - (start_hour * 60 + start_minute)
# 멜로디를 음별로 구분한 리스트를 반환하는함수:
def get_real_melody(melody):
melody_list = []
for i in range(len(melody) - 1):
each_melody = ''
if melody[i] != '#':
if melody[i+1] == '#':
each_melody = melody[i] + melody[i+1]
else:
each_melody = melody[i]
else:
continue
melody_list.append(each_melody)
if melody[-1] != '#':
melody_list.append(melody[-1])
return melody_list
def solution(m, musicinfos):
musicinfo_list = []
for i in range(len(musicinfos)):
musicinfo = musicinfos[i]
start, end, title, melody = musicinfo.split(",")
time = get_playing_time(start, end) # 음악이 틀어진 시간(분)
# 음악이 틀어진 시간(분) 동안 틀어진 음
real_melody_list = get_real_melody(melody)
print(real_melody_list)
real_melody = (time // len(real_melody_list)) * real_melody_list
real_melody += real_melody_list[:time % len(real_melody_list)]
musicinfo_list.append([i, time, title, real_melody])
print(musicinfo_list)
candidates = []
for musicinfo in musicinfo_list:
real_melody = musicinfo[3]
if is_m_in_melody(m, real_melody):
candidates.append(musicinfo)
candidates.sort(key = lambda x: (-x[1], x[0]))
print(candidates)
if candidates:
return candidates[0][2]
else:
return "(None)"
진짜 the love..
728x90
728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
테스트케이스 파악이 어려운 빡센 구현 문제다.
나도 히든테케 파악을 못해서 계속 40점, 50점, 60점 이렇게 나오다가
결국 풀이에 있는 테케를 보고 풀었다.
풀이 코드
# 네오가 기억한 멜로디 m이 방송된 곡 melody에 있으면 true, 없으면 false를 리턴하는 함수
# C와 C#을 구분해야 함
def is_m_in_melody(m, melody):
melody = "".join(melody)
if m in melody:
temp = melody.replace(m, '1')
if '1#' in temp:
real_temp = temp.replace('1#', '')
# '1#'도 있고 '1'도 있는 경우에는 True임
if '1' in real_temp:
return True
else:
return False
else:
return True
else:
return False
# 음악이 틀어진 시간을 리턴해주는 함수
def get_playing_time(start, end):
start_hour, start_minute = map(int, start.split(":"))
end_hour, end_minute = map(int, end.split(":"))
return (end_hour * 60 + end_minute) - (start_hour * 60 + start_minute)
# 멜로디를 음별로 구분한 리스트를 반환하는함수:
def get_real_melody(melody):
melody_list = []
for i in range(len(melody) - 1):
each_melody = ''
if melody[i] != '#':
if melody[i+1] == '#':
each_melody = melody[i] + melody[i+1]
else:
each_melody = melody[i]
else:
continue
melody_list.append(each_melody)
if melody[-1] != '#':
melody_list.append(melody[-1])
return melody_list
def solution(m, musicinfos):
musicinfo_list = []
for i in range(len(musicinfos)):
musicinfo = musicinfos[i]
start, end, title, melody = musicinfo.split(",")
time = get_playing_time(start, end) # 음악이 틀어진 시간(분)
# 음악이 틀어진 시간(분) 동안 틀어진 음
real_melody_list = get_real_melody(melody)
print(real_melody_list)
real_melody = (time // len(real_melody_list)) * real_melody_list
real_melody += real_melody_list[:time % len(real_melody_list)]
musicinfo_list.append([i, time, title, real_melody])
print(musicinfo_list)
candidates = []
for musicinfo in musicinfo_list:
real_melody = musicinfo[3]
if is_m_in_melody(m, real_melody):
candidates.append(musicinfo)
candidates.sort(key = lambda x: (-x[1], x[0]))
print(candidates)
if candidates:
return candidates[0][2]
else:
return "(None)"
진짜 the love..
728x90