Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프로그래머스
- 문자열 압축
- 스프링 MVC
- 맛집 투어
- 다이나믹 프로그래밍
- 2589
- 맛집
- mvc
- 2839
- Spring
- 2638
- 설탕 배달
- 2020 KAKAO BLIND
- 쓰레드 풀
- 호유동
- 알고리즘
- HTTP API
- 서블릿
- BFS
- 포두부 보쌈
- dp
- 투어
- 동적 프로그래밍
- 1로 만들기
- Servlet
- 백준
- 스프링
- 고모네 콩탕
- 양꼬치
- 완도산회
Archives
- Today
- Total
프로그래밍 공방
[프로그래머스] 방금그곡 본문
문제
programmers.co.kr/learn/courses/30/lessons/17683
코딩테스트 연습 - [3차] 방금그곡
방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV,
programmers.co.kr
문제해결방법
처음에 주어진 멜로디 문자열 m과 musicinfos의 원소들에서 C#, D#, F#, G#, A# 를 겹치지 않는 다른 알파벳으로 바꿔준다.
각 음악의 시간을 계산해서 그 길이가 되도록 음악을 자르거나 반복해준다.
멜로디가 존재하는 음악들끼리 길이를 비교하여 가장 긴 음악의 제목을 반환해주고 같을 경우 먼저 나온 음악의 제목을 반환해준다.
코드
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | package Programmers; public class Solution_방금그곡 { public static String changeMusic(String m) { StringBuilder sb = new StringBuilder(); for(int i=0; i<m.length(); i++) { int index = m.length()-i-1; char ch = ' '; if(m.charAt(index)=='#') { if(m.charAt(index-1)=='A') ch = 'L'; else if(m.charAt(index-1)=='G') ch = 'K'; else if(m.charAt(index-1)=='F') ch = 'J'; else if(m.charAt(index-1)=='D') ch = 'I'; else if(m.charAt(index-1)=='C') ch = 'H'; i++; } else ch = m.charAt(index); sb.append(ch); } return sb.reverse().toString(); } public static int getTime(String time) { String[] t = time.split(":"); return Integer.parseInt(t[0])*60+Integer.parseInt(t[1]); } public static String solution(String m, String[] musicinfos) { String answer = ""; int max = Integer.MIN_VALUE; m = changeMusic(m); for(int i=0; i<musicinfos.length; i++) { String[] s = musicinfos[i].split(","); int length = getTime(s[1]) - getTime(s[0]); String word = s[2]; String music = changeMusic(s[3]); StringBuilder sb = new StringBuilder(); for(int j=0; j<length; j++) { sb.append(music.charAt(j%music.length())); } music = sb.toString(); if(music.contains(m) && max<length) { max = length; answer = word; } } return answer; } public static void main(String[] args) { String m = "ABC"; String[] musicinfos = {"12:00,12:14,HELLO,C#DEFGAB", "13:00,13:05,WORLD,ABCDEF"}; System.out.println(solution(m, musicinfos)); } } | cs |
코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.
'개발 > 문제해결' 카테고리의 다른 글
[백준] 1561번 : 놀이 공원 (0) | 2021.02.10 |
---|---|
[프로그래머스] 파일명 정렬 (0) | 2021.02.10 |
[프로그래머스] 실패율 (0) | 2021.02.10 |
[프로그래머스] 다트 게임 (0) | 2021.02.10 |
[프로그래머스] 메뉴 리뉴얼 (0) | 2021.02.08 |