요르딩딩
프로그래머스 : 방금그곡 본문
728x90
반응형
이번문제는 문자열에 관련된 문제이다.
처음에는 쉽게 접근했으나, 조건들이 여러개 있거 확인하는데, 시간이 걸렸던것 같다.
여기서는 몇가지 포인트들만 구현할 줄 알면 된다.
포인트는 아래 3가지가 있다.
- 특수한 두개의 문자를 중복되지 않는 한개의 문자로 대체해서 사용한다.
- 시간간의 차이는 모두 분으로 만들어 계산한다. : 06:30 ~ 07:10 -> 430분 - 390분 = 40분
- 일정한 숫자를 반복해서 붙일때 : 나머지(%)를 사용 5/4 = 1...(1) = (인덱스 % 반복길이)
추가로 런타임에러가 났었는데, 아래 2가지를 수정하여 해결했다.
- 시간차이, 제목을 저장할 map 대신 static 변수 사용으로 대체
- if문 두번 질의하던것을 OR을 적용하여 하나의 if문으로 수행
import java.util.*;
class Solution {
static String[] shapSt = {"A#", "C#", "D#", "F#", "G#"};
static String[] shapCh = {"1" , "2" , "3" , "4" , "5"}; //1음절이면서 중복되지 않는 값으로 대체*****
static int timeGab;
static String name;
public String solution(String m, String[] musicinfos) {
String answer = "";
timeGab =0;
name =null;
//m값 # 대체
for(int j=0; j< shapSt.length; j++) {
if(m.contains(shapSt[j])){
m = m.replaceAll(shapSt[j], shapCh[j]);
}
}
for(int i =0; i<musicinfos.length; i++) {
String[] arr = musicinfos[i].split(",");
String[] time0 = arr[0].split(":");
String[] time1 = arr[1].split(":");
String naming = arr[2];
String music = arr[3];
//분크기 계산 - 모두 분으로 치환후 빼기 *****
int ho = Integer.parseInt(time1[0])*60 - Integer.parseInt(time0[0])*60;
int mi = Integer.parseInt(time1[1]) - Integer.parseInt(time0[1]);
int gap = ho + mi;
//음악 # 대체
for(int j=0; j< shapSt.length; j++) {
if(music.contains(shapSt[j])) {
music = music.replaceAll(shapSt[j], shapCh[j]);
}
}
//음 붙이기
String st ="";
int size = music.length();
for(int j=0; j < gap; j++) {
st+= music.charAt(j%size); //반복을 위해 나머지값을 사용 5/4 = 1...(1) = (인덱스 % 반복길이)*****
}
//제목찾기
if(st.contains(m)) { // String.contains(st) 가능*****
if(timeGab == 0 || timeGab - gap < 0) {
timeGab = gap;
name = naming;
continue;
}
}
}
if(name == null) { //일치하는 것이 없을 경우
return "(None)";
}
else {
answer = name;
}
return answer;
}
}
728x90
반응형
'[코딩테스트] > 문제풀이' 카테고리의 다른 글
프로그래머스 : [1차]비밀지도 (2진수, 비트연산) (0) | 2022.05.03 |
---|---|
프로그래머스 : 실패율 (0) | 2022.04.25 |
프로그래머스 : 124나라 (규칙찾기) (0) | 2022.04.19 |
프로그래머스 : 파일명 정렬 (comparator , 정규식) (0) | 2022.04.18 |
프로그래머스 : 주차 요금 계산 (0) | 2022.04.12 |
Comments