Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- parseInt()
- 상속
- 순열 재귀
- 자바 재귀 조합
- 자바
- jquery 속성선택자
- java lambda
- 알고리즘
- 재귀
- 서로소
- jquery 필터선택자
- 자바 조합 재귀
- 후위표기
- 알고리즘 그래프
- 재귀함수
- Java
- 조합 재귀
- inner class
- 자바 순열 코드
- 순열코드
- 자바스크립트 이벤트중지
- jquery dom 계층 선택자
- java Collections.sort()
- 자바스크립트 이벤트처리
- str to char array
- java 내부 클래스
- char to str
- 자바입출력
- jquery 이벤트 처리
- Interface
Archives
- Today
- Total
유블로그
[프로그래머스] 방금그곡 Java 본문
[프로그래머스] level2 방금그곡
제발..
10,19,30
이 3개가 자꾸 틀린다
알 수가 없다 진짜
계속 보면서 오류를 찾기 위해서,,, 기록
처음엔 아래 코드로 했다가
package programmers.level2;
public class 방금그곡_1시간24분 { // 1시간 24분째 3개 틀리는 중
public String solution(String m, String[] musicinfos) {
if(musicinfos.length == 0) return "(None)";
String answer = "";
int MAX = 0;
for (int i = 0; i < musicinfos.length; i++) {
String[] info = musicinfos[i].split(",");
String[] t1 = info[0].split(":");
String[] t2 = info[1].split(":");
int len;
if(t1[0].equals(t2[0])) {
len = Integer.parseInt(t2[1]) - Integer.parseInt(t1[1]);
}
else {
len = 60 - Integer.parseInt(t1[1]) + Integer.parseInt(t2[1]);
}
StringBuilder sb = new StringBuilder();
int idx = 0;
for (int t = 0; t < len; t++) {
if(idx == info[3].length()) idx = 0;
sb.append(info[3].charAt(idx++));
if(idx < info[3].length() && info[3].charAt(idx) == '#') {
sb.append(info[3].charAt(idx++));
}
}
String music = sb.toString();
for (int j = 0; j < music.length(); j++) {
if(m.length() > music.length()-j) break;
idx = 0;
if(m.charAt(idx) == music.charAt(j)) {
boolean success = true;
for (int j2 = j+1; j2 < music.length(); j2++) {
idx++;
if(idx == m.length()) {
if(j2 < music.length() && music.charAt(j2) == '#')
success = false;
break;
}
if(m.charAt(idx) != music.charAt(j2)) {
success = false;
break;
}
}
if(success) {
if(MAX < len) {
answer = info[2];
MAX = len;
}
}
}
}
}
if(answer.length() == 0) {
return "(None)";
}
return answer;
}
}
3개가 계속 틀리길래
#을 치환하는 방식으로 바꿔서 새로 짰다.
C#, A#... 이런 것들 처리를 위해 아예 다른문자로 바꾸고
했는데
이상하게 이 코드도 10,19,30 번만 틀린다....
내가 놓치고 있는 게 있는 걸까 알 수가 없다..........
class Solution {
public String solution(String m, String[] musicinfos) { // 36분
if(musicinfos.length == 0) return "(None)";
m = change(m);
String answer = "";
int MAX = 0;
for (int i = 0; i < musicinfos.length; i++) {
String[] info = musicinfos[i].split(",");
String[] t1 = info[0].split(":");
String[] t2 = info[1].split(":");
int len;
if(t1[0].equals(t2[0])) {
len = Integer.parseInt(t2[1]) - Integer.parseInt(t1[1]);
}
else {
len = 60 - Integer.parseInt(t1[1]) + Integer.parseInt(t2[1]);
}
info[3] = change(info[3]);
StringBuilder sb = new StringBuilder();
int idx = 0;
for (int t = 0; t < len; t++) {
if(idx == info[3].length()) idx = 0;
sb.append(info[3].charAt(idx++));
}
String music = sb.toString();
if(music.contains(m)) {
if(MAX < len) {
answer = info[2];
MAX = len;
}
}
}
if(answer.length() == 0) {
return "(None)";
}
return answer;
}
public String change(String str) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < str.length(); j++) {
switch(str.charAt(j)) {
case 'C':
if(j+1 < str.length() && str.charAt(j+1) == '#') sb.append('B');
else sb.append('A');
break;
case 'D':
if(j+1 < str.length() && str.charAt(j+1) == '#') sb.append('D');
else sb.append('C');
break;
case 'E':
sb.append('E');
break;
case 'F':
if(j+1 < str.length() && str.charAt(j+1) == '#') sb.append('G');
else sb.append('F');
break;
case 'G':
if(j+1 < str.length() && str.charAt(j+1) == '#') sb.append('I');
else sb.append('H');
break;
case 'A':
if(j+1 < str.length() && str.charAt(j+1) == '#') sb.append('K');
else sb.append('J');
break;
case 'B':
sb.append('L');
break;
}
}
return sb.toString();
}
}
성공..
시간 때문에 틀린 거였다..
좀 어이없다
시간계산이 이상해서 좀 의문
class Solution {
public String solution(String m, String[] musicinfos) {
if(musicinfos.length == 0) return "(None)";
m = m.replace("C#", "c").replace("D#", "d").replace("E#", "e").replace("F#", "f").replace("G#","g").replace("A#","a");
String answer = "";
int MAX = 0;
for (int i = 0; i < musicinfos.length; i++) {
String[] info = musicinfos[i].split(",");
String[] t1 = info[0].split(":");
String[] t2 = info[1].split(":");
int len;
if(t1[0].equals(t2[0])) {
len = Integer.parseInt(t2[1]) - Integer.parseInt(t1[1]);
}
else {
len = 0;
len += 60 * (Integer.parseInt(t2[0]) - Integer.parseInt(t1[0]));
len += Integer.parseInt(t2[1]) - Integer.parseInt(t1[1]);
}
info[3] = info[3].replace("C#", "c").replace("D#", "d").replace("E#", "e").replace("F#", "f").replace("G#","g").replace("A#","a");
StringBuilder sb = new StringBuilder();
int idx = 0;
for (int t = 0; t < len; t++) {
if(idx == info[3].length()) idx = 0;
sb.append(info[3].charAt(idx++));
}
String music = sb.toString();
if(music.contains(m)) {
if(MAX < len) {
answer = info[2];
MAX = len;
}
}
}
if(answer.length() == 0) {
return "(None)";
}
return answer;
}
}
'알고리즘' 카테고리의 다른 글
[프로그래머스] 야근지수 Java (0) | 2021.02.07 |
---|---|
[백준] baekjoon 14499 주사위굴리기 Java (0) | 2021.02.02 |
[프로그래머스] 가장긴팰린드롬 Java (0) | 2021.01.31 |
[프로그래머스] 캐시 Java (0) | 2021.01.29 |
[프로그래머스] 프렌즈4블록 Java (0) | 2021.01.29 |