반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/17683
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 분석
[입력형식]
입력으로 네오가 기억한 멜로디를 담은 문자열 m과 방송된 곡의 정보를 담고 있는 배열 musicinfos가 주어진다.
- m은 음 1개 이상 1439개 이하로 구성되어 있다.
- musicinfos는 100개 이하의 곡 정보를 담고 있는 배열로, 각각의 곡 정보는 음악이 시작한 시각, 끝난 시각, 음악 제목, 악보 정보가 ','로 구분된 문자열이다.
- 음악의 시작 시각과 끝난 시각은 24시간 HH:MM 형식이다.
- 음악 제목은 ',' 이외의 출력 가능한 문자로 표현된 길이 1 이상 64 이하의 문자열이다.
- 악보 정보는 음 1개 이상 1439개 이하로 구성되어 있다.
문제 접근
음악의 악보로 사용 되는 음악이 "C#" 처럼 2글자인 경우가 있기 때문에 주어진 배열을 String 리스트로 우선 변경 후 사용했다.
해당 문제는 문제에서 요구하는 것을 그대로 풀기만 하면 크게 시간 초과없이도 해결됐다.
주어진 musicinfos 배열을 split 후 주어진 m 과 info 의 악보의 문자열을 하나씩 비교하며 info 악보에 m 이 전부 들어가면 answer를 업데이트 해주었다.
업데이트 할 땐 그 음악의 재생 길이가 가장 클 경우에만 업데이트 해주었다.
재생 길이가 같은 경우에는 먼저 들어 온 순서로 반환해야 하기 때문에 재생 길이가 그 전의 가장 큰 재생 길이보다 큰 경우에만 업데이트 했다. (같은 경우는 제외)
m과 악보를 비교할 때는 재생길이 만큼 for문을 돌렸는데 악보의 길이를 넘어간 경우에는 다시 앞으로 돌아와야 하기 때문에 현재 인덱스를 악보의 길이로 나눈 나머지 값을 새로운 인덱스 값으로 사용하였다.
코드
import java.util.*;
class Solution {
public String solution(String m, String[] musicinfos) {
String answer = "";
List<String> mList = new ArrayList<>();
int maxPlayTime = 0;
for(char c : m.toCharArray()){
if(c=='#'){
String last = mList.remove(mList.size()-1);
mList.add(last+"#");
}else{
mList.add(c+"");
}
}
for(String info : musicinfos){
String[] splitArr = info.split(",");
String[] start = splitArr[0].split(":");
String[] end = splitArr[1].split(":");
String name = splitArr[2];
int playTime = (Integer.parseInt(end[0]) * 60 + Integer.parseInt(end[1])) -
(Integer.parseInt(start[0]) * 60 + Integer.parseInt(start[1]));
List<String> code = new ArrayList<>();
for(char c : splitArr[3].toCharArray()){
if(c=='#'){
String last = code.remove(code.size()-1);
code.add(last+"#");
}else{
code.add(c+"");
}
}
for(int i=0; i<=playTime; i++){
int idx = i % code.size();
int cnt = 0;
for(String str : mList){
if(!code.get(idx).equals(str)){
break;
}
idx = (idx+1) % code.size();
cnt++;
}
if (cnt == mList.size() && maxPlayTime < playTime) {
maxPlayTime = playTime;
answer = name;
break;
}
}
}
if (answer.isEmpty()) {
answer = "(None)";
}
return answer;
}
}반응형
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] 호텔 대실 (0) | 2024.04.02 |
|---|---|
| [프로그래머스] 멀쩡한 사각형 (0) | 2024.03.29 |
| [프로그래머스] 하노이의 탑 (0) | 2024.03.28 |
| [프로그래머스] 큰 수 만들기 (0) | 2024.03.28 |
| [프로그래머스] 산 모양 타일링 (실패) (0) | 2024.03.22 |