250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 안드로이드
- flutter network call
- 막내의막무가내 코틀린 안드로이드
- 주택가 잠실새내
- 막내의막무가내 안드로이드
- 주엽역 생활맥주
- 막내의막무가내 안드로이드 에러 해결
- 막내의막무가내 안드로이드 코틀린
- Fragment
- 막내의 막무가내
- 프로그래머스 알고리즘
- 막내의막무가내 목표 및 회고
- 막내의막무가내 코틀린
- 막무가내
- 막내의막무가내 SQL
- 막내의막무가내 플러터
- 막내의막무가내 프로그래밍
- 안드로이드 sunflower
- 막내의막무가내
- 막내의 막무가내 알고리즘
- 막내의막무가내 일상
- 2022년 6월 일상
- 막내의막무가내 플러터 flutter
- 안드로이드 Sunflower 스터디
- 부스트코스에이스
- 막내의막무가내 rxjava
- 막내의막무가내 코볼 COBOL
- 막내의막무가내 알고리즘
- 부스트코스
- 프래그먼트
Archives
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[알고리즘] 프로그래머스 [3차] 방금그곡 (2018 KAKAO BLIND RECRUITMENT) -문자열, 구현- 자바 본문
알고리즘/문자열, 정렬
[알고리즘] 프로그래머스 [3차] 방금그곡 (2018 KAKAO BLIND RECRUITMENT) -문자열, 구현- 자바
막무가내막내 2021. 7. 7. 19:31728x90
https://programmers.co.kr/learn/courses/30/lessons/17683?language=java
프로그래머스 방금그곡 문제를 풀어봤습니다. ㅎㅎ
한 단어로 된 음 여러개로 이루어진 악보문장이 아니라 C# 과 같이 뒤에 #이 들어가 2개의 문자로 이루어져 있는 음인 경우 문자열에서 한개씩 불러와 음을 비교하기가 조금 까다로울 수 있습니다.
그래서 두단어로 이루어진 C#과 같은 음을 c로 치환을 하면 더 쉽게 문제를 풀 수 있습니다. (음도 총 12개로 정해져 있기 떄문에 가능합니다)
단순 문자열 파싱말고 전처리 후 파싱을 하면 더 쉽게 풀 수 있다는 점을 배운 문제였습니다.
나머지 풀이는 주석으로 대체합니다.
[Java]
class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
solution.solution("CC#BCC#BCC#BCC#B", new String[]{"03:00,03:30,FOO,CC#B", "04:00,04:08,BAR,CC#BCC#BCC#B"});
}
// C, C#, D, D#, E, F, F#, G, G#, A, A#, B -> 전체 음표
public String solution(String m, String[] musicinfos) {
String answer = "(None)";
m = convert(m);
int max = 0; // 최장재생시간
for (int i = 0; i < musicinfos.length; i++) {
String[] str = musicinfos[i].split(",");
String title = str[2]; // 음악제목
String music = convert(str[3]); // 악보
String[] start = str[0].split(":"); // 시작시간
String[] end = str[1].split(":"); // 종료시간
int hour = (Integer.parseInt(end[0]) - Integer.parseInt(start[0])) * 60;
int minute = Integer.parseInt(end[1]) - Integer.parseInt(start[1]);
int time = hour + minute;
StringBuilder sb = new StringBuilder(); // 재싱시간동안 재생된 전체멜로디
for (int j = 0; j < time; j++) { // 전체멜로디 만들기
sb.append(music.charAt(j % music.length()));
}
if (sb.toString().contains(m)) { // 기억한멜로디(방금그곡)이 전체멜로디에 들어있는지
if (max < sb.toString().length()) { // 가장 긴 멜로디인 경우 정답 업데이트
max = sb.toString().length();
answer = title;
}
}
}
System.out.println(answer);
return answer;
}
// 두글자(음표#) 한글자로 치환
private String convert(String m) {
m = m.replaceAll("A#", "a");
m = m.replaceAll("C#", "c");
m = m.replaceAll("D#", "d");
m = m.replaceAll("F#", "f");
m = m.replaceAll("G#", "g");
return m;
}
}
https://github.com/mtjin/algorithm_practice/commit/57095a258f21dad3fb59268cb93e68424e0ef270
3일동안은 잠시 코테를 쉬고 안드로이드 공부를 할 것 같습니다.
댓글과 공감은 큰 힘이 됩니다. 감사합니다. !!
728x90
'알고리즘 > 문자열, 정렬' 카테고리의 다른 글
[알고리즘] 프로그래머스 이진 변환 반복하기 -문자열, 단순구현- 자바 (0) | 2021.06.15 |
---|---|
[알고리즘] 백준 18870 좌표 압축 -정렬- 자바 코틀린 (0) | 2021.05.11 |
[알고리즘] 프로그래머스 [3차] 파일명 정렬 -정렬- 자바 (0) | 2020.10.12 |
[알고리즘] 백준 10814 나이순 정렬 -정렬- (0) | 2020.06.24 |
[알고리즘] 프로그래머스 다음 큰 숫자 -연습문제, 문자열- (0) | 2020.04.22 |
Comments