[Programmers] 방금그곑

Updated:

방금그곑

방금그곑 을 ν΄λ¦­ν•˜λ©΄ λ°”λ‘œ μ΄λ™ν•œλ‹€.

이 λ¬Έμ œλŠ” μ„Έ 가지 쑰건을 ν•΄κ²° ν•˜λ©΄ λ˜λŠ” λ¬Έμ œμ΄λ‹€.

  1. 주어진 λ¬Έμžμ—΄μ„ μ‹œμž‘μ‹œκ°„, μ’…λ£Œμ‹œκ°„, λ…Έλž˜μ΄λ¦„, λ©œλ‘œλ”” 둜 λ‚˜λˆ„λŠ” 것
  2. λ¬Έμžμ—΄λ‘œ λ˜μ–΄μžˆλŠ” μ‹œμž‘μ‹œκ°„, μ’…λ£Œμ‹œκ°„μ„ 톡해 λ…Έλž˜κ°€ μž¬μƒ 된 μ‹œκ°„μ„ κ΅¬ν•˜λŠ” 것
  3. μž¬μƒ 된 μ‹œκ°„μ„ 톡해 λ…Έλž˜ 이름과 μž¬μƒ 된 λ©œλ‘œλ””λ₯Ό κ΅¬ν•˜λŠ” 것

μ΄λ ‡κ²Œ κ΅¬ν•˜λ©΄ 정닡을 찾을 수 μžˆλ‹€.


λ¨Όμ € split(β€˜,’) 을 μ΄μš©ν•΄ μ‹œμž‘μ‹œκ°„, μ’…λ£Œμ‹œκ°„, λ…Έλž˜μ΄λ¦„, λ©œλ‘œλ””λ₯Ό λ‚˜λˆ„μ–΄ λ¦¬μŠ€νŠΈμ— μ €μž₯ν•œλ‹€.

그리고 # 이 뢙은 λ©œλ‘œλ””λŠ” λ‚˜μ€‘μ— κ³„μ‚°ν• λ•Œ κ³¨μΉ˜κ°€ μ•„ν”Œ 수 도 μžˆλ‹€. λ•Œλ¬Έμ— νŠΉμ • 기호둜 μΉ˜ν™˜ ν•΄ μ€€λ‹€.

μ‹œμž‘μ‹œκ°„κ³Ό μ’…λ£Œμ‹œκ°„μ€ λ‹€μ‹œ split(β€˜:’) 을 μ΄μš©ν•΄ λ‚˜λˆˆλ’€ μ •μˆ˜λ‘œ λ°”κΎΌλ‹€.

μ΄λ•Œ μ‹œμž‘ λΆ„ 보닀 μ’…λ£Œ 뢄이 더 큰 κ²½μš°λŠ” κ·ΈλŒ€λ‘œ κ³„μ‚°ν•˜λ©΄ λ˜μ§€λ§Œ μ’…λ£Œ 뢄이 더 μž‘μ€ κ²½μš°μ—λŠ” λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ 계산을 ν•œλ‹€.

μ–΄μ°¨ν”Ό μž¬μƒ μ‹œκ°„λ§Œ κ΅¬ν•˜λ©΄ λ˜λŠ” 것 이기 λ•Œλ¬Έμ— μ’…λ£Œ μ‹œκ°„μ„ λΆ„μœΌλ‘œ λ°”κΎΈκ³  μ‹œμž‘ μ‹œκ°„μ„ λΆ„μœΌλ‘œ λ°”κΏ” 빼주기만 ν•˜λ©΄ λœλ‹€.

이제 λ…Έλž˜μ˜ μž¬μƒ μ‹œκ°„μ„ κ΅¬ν–ˆλ‹€λ©΄ 그에 맞게 λ©œλ‘œλ””λ₯Ό λ§Œλ“€μ–΄ μ£Όλ©΄ λœλ‹€.

λ…Έλž˜ λ©œλ‘œλ””λ³΄λ‹€ μž¬μƒ μ‹œκ°„μ΄ κΈΈ μˆ˜λ„ 있기 λ•Œλ¬Έμ— μˆœν™˜ν•΄μ„œ μ €μž₯ν•˜λ„λ‘ ν•œλ‹€.

λ‚΄κ°€ 듀은 λ©œλ‘œλ””κ°€ μž¬μƒ 된 λ…Έλž˜ λ©œλ‘œλ”” μ•ˆμ— μžˆλ‹€λ©΄ μž¬μƒ 된 λ©œλ‘œλ””μ˜ 길이와 λ…Έλž˜ 이름을 μ €μž₯ν•œλ‹€.

λ§ˆμ§€λ§‰μœΌλ‘œ 찾고자 ν•˜λŠ” μŒμ•…μ΄ μ—†λŠ” 경우 None 을 λ°˜ν™˜, ν•œ 개인 경우 κ·ΈλŒ€λ‘œ λ°˜ν™˜ ν•˜λ©΄ λœλ‹€.

ν•˜μ§€λ§Œ 찾고자 ν•˜λŠ” μŒμ•…μ΄ μ—¬λŸ¬ 개 인 경우 μž¬μƒ μ‹œκ°„μ΄ 제일 κΈ΄ 것을 좜λ ₯ν•˜κ³  μž¬μƒ μ‹œκ°„λ„ κ°™λ‹€λ©΄ λ¨Όμ € μž…λ ₯ 된 λ…Έλž˜λ₯Ό 좜λ ₯ν•œλ‹€.

def get_time(start, end):
	start_time = start.split(':')
	start_h = int(start_time[0])
	start_m = int(start_time[1])

	end_time = end.split(':')
	end_h = int(end_time[0])
	end_m = int(end_time[1])
  
	# 	if start_m <= end_m:  # μ‹œμž‘ λΆ„ 보닀 μ’…λ£Œ 뢄이 더 ν¬κ±°λ‚˜ κ°™ 경우, μž‘μ€ 경우
	# 		runtime = (end_h - start_h) * 60 + (end_m - start_m)
	# 	else:
	# 		runtime = (end_h - start_h - 1) * 60 + (60 - start_m) + end_m

	return (end_h * 60 + end_m) - (start_h * 60 + start_m)


def solution(m, musicinfos):
	song = dict()
	info = [val.split(',') for val in musicinfos]  # μ‹œμž‘μ‹œκ°„, μ’…λ£Œμ‹œκ°„, λ…Έλž˜μ΄λ¦„, λ©œλ‘œλ””λ‘œ λ‚˜λˆ„κΈ°
	m = m.replace('C#', '$')  #  #이 뢙은 λ©œλ‘œλ””λŠ” κ³„μ‚°ν•˜κΈ° νŽΈν•˜κ²Œ μΉ˜ν™˜ν•œλ‹€
	m = m.replace('D#', '%')
	m = m.replace('F#', '^')
	m = m.replace('G#', '&')
	m = m.replace('A#', '*')

	for val in info:
		val[3] = val[3].replace('C#', '$')
		val[3] = val[3].replace('D#', '%')
		val[3] = val[3].replace('F#', '^')
		val[3] = val[3].replace('G#', '&')
		val[3] = val[3].replace('A#', '*')

		runtime = get_time(val[0], val[1])
		melody = ''
		for idx in range(runtime):  #  μž¬μƒ μ‹œκ°„λ§ŒνΌ λ©œλ‘œλ””λ₯Ό λ‹΄λŠ”λ‹€
			melody += val[3][idx % len(val[3])]
		song[val[2]] = melody

	answer = list()
	for val in song.items():  # 찾고자 ν•˜λŠ” μŒμ•…μ„ λͺ¨λ‘ λ‹΄λŠ”λ‹€
		if m in val[1]:
			answer.append([val[0], len(val[1])])

	if len(answer) == 0:  #  찾고자 ν•˜λŠ” μŒμ•…μ΄ μ—†λŠ” 경우, ν•œ 개인 경우, μ—¬λŸ¬ 개인 경우 쑰건
		return '(None)'

	elif len(answer) == 1:
		return answer[0][0]

	else:
		longest = max([val[1] for val in answer])
		for val in answer:
			if longest == val[1]:
				return val[0]

문제λ₯Ό 꼼꼼히 읽어야겠닀.. μ²˜μŒμ— ν’€μ—ˆμ„ λ•Œ λŠ” 30개의 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ 쀑에 3κ°œκ°€ ν‹€λ Έμ—ˆλ‹€.

이유λ₯Ό ν•œμ°Έ λͺ» μ°Ύκ³  μžˆλ‹€κ°€ 닡이 μ—¬λŸ¬ 개 인 경우 쑰건에 맞좰 좜λ ₯ ν•˜λŠ” 코딩을 해주지 μ•Šμ•˜λ‹€λŠ” 것을 μ•Œμ•˜λ‹€.

쑰건을 λ§Œλ“€μ–΄ μ£Όλ‹ˆ λͺ¨λ‘ λ§žμ•˜λ‹€..


Categories:

Updated:

Leave a comment