[프로그래머스] 카카오_방금그곡 (자바 풀이)
- 알고리즘 문제 해결(PS)/[프로그래머스]
- 2022. 2. 14.
문제
https://programmers.co.kr/learn/courses/30/lessons/17683?language=java#
풀이
문자열 파싱을 잘 하면 어렵지 않게 풀 수 있는 문제다. 아래와 같은 함수들을 작성해서 이용했다.
1. C# -> c, D# - >d 처럼 #이 붙은 문자열을 바꿔주는 함수
2. 12:00, 12:10 -> "10을 반환" 하는 것처럼 문자열에서 시간을 구하는 함수
자세한 내용은 코드를 참고하자.
코드
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 55 56 57 58 59 | import java.util.* ; class Solution { static HashMap<String, String> dict = new HashMap<>(); // 치환할 문자열 저장 public String solution(String m, String[] musicinfos) { String answer = "(None)"; dict.put("C#", "c"); dict.put("D#", "d"); dict.put("F#", "f"); dict.put("G#", "g"); dict.put("A#", "a"); m = change(m); int maxTime = 0; for(int i=0; i<musicinfos.length; i++){ String[] temp = musicinfos[i].split(","); int time = getTime(temp[0], temp[1]); String music = change(temp[3]); /* 재생시간만큼 music 반복 */ while(music.length()<time){ music += music; } music = music.substring(0,time); /* 조건 일치 여부 확인 */ if(music.contains(m)){ if(maxTime < time){ // 재생 시간이 가장 긴 것을 정답으로 maxTime = time; answer = temp[2]; } } } return answer; } /* #이 붙은 문자열 치환 */ static String change(String str){ for(String key : dict.keySet()){ str = str.replace(key, dict.get(key)); } return str; } /* 재생시간 구하기 */ static int getTime(String str1, String str2){ String[] time1 = str1.split(":"); String[] time2 = str2.split(":"); int h1 = Integer.parseInt(time1[0])*60; int h2 = Integer.parseInt(time2[0])*60; int m1 = Integer.parseInt(time1[1]); int m2 = Integer.parseInt(time2[1]); return (h2+m2)-(h1+m1); } } | cs |
결과
반응형
'알고리즘 문제 해결(PS) > [프로그래머스]' 카테고리의 다른 글
[프로그래머스] 카카오_파일명 정렬 (자바 풀이) (1) | 2022.02.15 |
---|---|
[프로그래머스] 카카오_압축 (자바 풀이) (0) | 2022.02.14 |
[프로그래머스] 카카오_추석 트래픽 (자바 풀이) (0) | 2022.01.25 |
[프로그래머스] 카카오_셔틀버스 (자바 풀이) (0) | 2022.01.25 |
[프로그래머스] 카카오_뉴스 클러스터링 (자바 풀이) (0) | 2022.01.25 |