[프로그래머스] [3차] 방금그곡(17683)

lhs's avatar
Jan 13, 2025
[프로그래머스] [3차] 방금그곡(17683)
 

1. 문제 풀이 아이디어

  • 재생 시간을 구하고 재생 시간만큼 문자열을 반복시킨 뒤, 특정 문자가 포함되어 있는지 비교하여 처리한다.
  • 두 문자인 음은 한 문자로 변환하여 처리한다.

2. 나의 정답 코드

class Solution { String[] sound = {"A#", "B#", "C#", "D#", "F#", "G#"}; public String solution(String m, String[] musicinfos) { String answer = "(None)"; int max = 0; for (int i = 0; i < sound.length; i++) { m = m.replace(sound[i], String.valueOf(i)); } for (String musicinfo : musicinfos) { String[] split = musicinfo.split(","); int time = time(split[1]) - time(split[0]); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < sound.length; i++) { split[3] = split[3].replace(sound[i], String.valueOf(i)); } while (stringBuilder.length() < time) { stringBuilder.append(split[3]); } if (stringBuilder.substring(0, time).contains(m)) { if (max < time) { max = time; answer = split[2]; } } } return answer; } private int time(String time) { String[] split = time.split(":"); return Integer.parseInt(split[0]) * 60 + Integer.parseInt(split[1]); } }

3. 정리

  • 두 문자인 음을 sound 배열에 저장한다.
  • 입력받은 m에서 두 문자인 음을 한 문자로 변환한다.
  • musicinfos 배열을 순회하며 처리한다.
    • 문자열을 나눠 재생 시간을 계산한다.
    • 악보에서 두 문자인 음을 한 문자로 변환한다.
    • stringBuilder의 길이가 재생 시간보다 작으면 반복하여 악보를 추가한다.
    • stringBuilder에서 0부터 time까지의 문자열 중 m이 포함되어 있고, 저장된 재생 길이보다 클 경우 maxanswer를 갱신한다.
  • 반복이 끝난 후 answer를 반환하여 문제를 해결한다.
Share article

LHS's Study Space