inblog logo
|
LHS's Study Space
    알고리즘문제풀기프로그래머스

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

    lhs's avatar
    lhs
    Jan 13, 2025
    [프로그래머스] [3차] 방금그곡(17683)
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리
    school.programmers.co.kr
    https://school.programmers.co.kr/learn/courses/30/lessons/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이 포함되어 있고, 저장된 재생 길이보다 클 경우 max와 answer를 갱신한다.
    • 반복이 끝난 후 answer를 반환하여 문제를 해결한다.
    Share article
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리

    LHS's Study Space

    RSS·Powered by Inblog