당신은 주제를 찾고 있습니까 “카카오 방금 그곡 – 카카오 코딩테스트 풀이 2 – 방금 그곡 [2018 KAKAO BLIND]“? 다음 카테고리의 웹사이트 ppa.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://ppa.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 딩코딩코 이(가) 작성한 기사에는 조회수 317회 및 좋아요 6개 개의 좋아요가 있습니다.
카카오 방금 그곡 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 카카오 코딩테스트 풀이 2 – 방금 그곡 [2018 KAKAO BLIND] – 카카오 방금 그곡 주제에 대한 세부정보를 참조하세요
문제 질문 링크 – https://programmers.co.kr/learn/courses/30/lessons/17683
2018 KAKAO BLIND 코딩테스트 문제 방금 그곡 해설 입니다
이론 부분과 풀이 부분으로 나누어져 있으며, 해당 영상을 통해 문제를 접근하는 방법에 대해 수월해지셨으면 좋겠습니다
다양한 문제 풀이 방법이 있겠지만, 조금 더 효율적이고 연산량이 적은 방법이 어떤 것일지 고민해보시는 것이 좋습니다.
또한 코드를 어떻게 간결하게 쓸 수 있을지 고민해보시다 보면 좋은 코드를 작성하실 수 있게 될 겁니다.
0:00 카카오 코딩테스트 풀이 2 – 카카오 코딩테스트 풀이 2 – 방금 그곡 [2018 KAKAO BLIND]0:48 문제 풀이 – 이론편 – 문제에서 구하는 것을 한 문장으로 정리하라.
1:21 문제 풀이 – 이론편 – 문제 목표 정리 – 자신이 들은 멜로디가 포함되어 있는 음악 중 재생된 시간이 제일 긴 음악
1:40 문제 풀이 – 이론편 – 주의해야 하는 점
2:24 문제 풀이 – 이론편 – 해결방법 1 – 문자열 기준으로 배열로 구분하기
3:05 문제 풀이 – 이론편 – 해결방법 2 – #이 붙은 문자들을 치환하기
4:12 문제 풀이 – 코드편 – 치환하는 replace_step 함수 구현하기
5:25 문제 풀이 – 코드편 – musicinfo 에서 값 추출하기
6:50 문제 풀이 – 코드편 – play_time 값 구하기
8:29 문제 풀이 – 코드편 – 주의! melody 도 치환해줘야 합니다
8:55 문제 풀이 – 코드편 – melody 에 m 이 포함되어 있는지만 확인하면 되는가? 그렇지 않습니다.
11:06 문제 풀이 – 코드편 – melody_played 구하기
12:19 문제 풀이 – 코드편 – 에러 발생 및 디버깅
13:28 문제 풀이 – 코드편 – melody_played 에 m이 포함 되어 있는지?
14:03 문제 풀이 – 코드편 – 원하는 것은 \”재생된 시간이 제일 긴 음악\” 이다. 또한 예외처리도 추가하자.
15:40 마무리 – 잘 안 풀린다면 내가 문제를 명확하게 이해했는지, 목표가 정확한지 정리해보자.
카카오 방금 그곡 주제에 대한 자세한 내용은 여기를 참조하세요.
[일반] 방금 그곡/방송 선곡표는 종료됐나요? | kakao 고객센터
[일반] 방금 그곡/방송 선곡표는 종료됐나요? 카카오뮤직 4.4.0 버전부터 내부 사정에 의해 종료될 예정입니다. 도움말을 통해 문제 …Source: cs.kakao.com
Date Published: 3/12/2022
View: 3183
카카오 – 방금 그곡 – velog
문제 · 방금그곡 서비스에서는 음악 제목, 재생이 시작되고 끝난 시각, 악보를 제공한다. · 네오가 기억한 멜로디와 악보에 사용되는 음은 C, C#, D, D#, E, …
Source: velog.io
Date Published: 8/5/2022
View: 9751
[3차] 방금그곡 – 코딩테스트 연습 – 프로그래머스 스쿨
방금그곡. 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 ‘방금그곡’ 서비스를 이용하곤 …
Source: school.programmers.co.kr
Date Published: 2/11/2022
View: 1470
프로그래머스 카카오 블라인드 방금그곡 [Level 2] (JAVA)
방금그곡 서비스에서는 음악 제목, 재생이 시작되고 끝난 시각, 악보를 제공한다. 네오가 기억한 멜로디와 악보에 사용되는 음은 C, C#, D, D#, …
Source: eno1993.tistory.com
Date Published: 10/16/2021
View: 7807
[프로그래머스] 17683 방금그곡(2018 카카오 블라인드)
public P17683방금그곡 { public String solution(String m, String[] musicinfos) { m = changeShap(m); int time = 0; String answer …
Source: lovelyunsh.tistory.com
Date Published: 9/17/2022
View: 7093
프로그래머스 카카오 2018 3차 방금그곡 – Youngble
내가푼방식. function solution(m, musicinfos) { var answer=[]; var numb=[]; for(var i=0; i< musicinfos.length; ...
Source: youngble.tistory.com
Date Published: 6/29/2022
View: 3432
방금그곡 C++ 2018 KAKAO Blind Recruitment – 냄비 냄비
방금그곡 서비스에서는 음악 제목, 재생이 시작되고 끝난 시각, 악보를 제공한다. · 네오가 기억한 멜로디와 악보에 사용되는 음은 C, C#, D, D#, E, F, F# …
Source: henrynoh.tistory.com
Date Published: 7/29/2021
View: 801
[프로그래머스 17683] – 카카오 방금그곡 – 씅의 기록하는 개발노트
[프로그래머스 17683] – 카카오 방금그곡. 승우승 2020. 5. 27. 17:53. 반응형. 문제출처. https://programmers.co.kr/learn/courses/30/lessons/17683.Source: swjeong.tistory.com
Date Published: 4/4/2021
View: 5825
주제와 관련된 이미지 카카오 방금 그곡
주제와 관련된 더 많은 사진을 참조하십시오 카카오 코딩테스트 풀이 2 – 방금 그곡 [2018 KAKAO BLIND]. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 카카오 방금 그곡
- Author: 딩코딩코
- Views: 조회수 317회
- Likes: 좋아요 6개
- Date Published: 2021. 6. 11.
- Video Url link: https://www.youtube.com/watch?v=spQD0SdYNgc
kakao 고객센터
내 뮤직룸은 구매한 음악을 담아 놓는 곳입니다. 내 뮤직룸에서는 자신의 뮤직룸을 추가한 친구들의 목록을 조회할 수 있으며,
음악, 앨범, 위시, My 메뉴를 통해 뮤직룸을 꾸미고 관리할 수 있습니다.
– 음악 : 구매한 음악을 감상하고, 관리할 수 있는 기능입니다. 새로운 곡을 추가하거나, 순서를 변경할 수 있으며, 댓글과 좋아요를 누른 친구들을 확인할 수 있습니다.
– 앨범 : 구입한 곡을 대상으로 주제에 맞춰 음악 앨범을 만드는 기능입니다. 제작된 앨범은 Pick탭을 통해 노출될 수 있습니다.
– 위시 : 구매하고 싶은 음악을 따로 모아 놓는 곳 입니다.
– My : 내가 감상하거나 좋아요한 음악들을 모아볼 수 있는 메뉴입니다.
카카오 – 방금 그곡
문제
라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 ‘방금그곡’ 서비스를 이용하곤 한다. 방금그곡에서는 TV, 라디오 등에서 나온 음악에 관해 제목 등의 정보를 제공하는 서비스이다.
네오는 자신이 기억한 멜로디를 가지고 방금그곡을 이용해 음악을 찾는다. 그런데 라디오 방송에서는 한 음악을 반복해서 재생할 때도 있어서 네오가 기억하고 있는 멜로디는 음악 끝부분과 처음 부분이 이어서 재생된 멜로디일 수도 있다. 반대로, 한 음악을 중간에 끊을 경우 원본 음악에는 네오가 기억한 멜로디가 들어있다 해도 그 곡이 네오가 들은 곡이 아닐 수도 있다. 그렇기 때문에 네오는 기억한 멜로디를 재생 시간과 제공된 악보를 직접 보면서 비교하려고 한다. 다음과 같은 가정을 할 때 네오가 찾으려는 음악의 제목을 구하여라.
방금그곡 서비스에서는 음악 제목, 재생이 시작되고 끝난 시각, 악보를 제공한다.
네오가 기억한 멜로디와 악보에 사용되는 음은 C, C#, D, D#, E, F, F#, G, G#, A, A#, B 12개이다.
각 음은 1분에 1개씩 재생된다. 음악은 반드시 처음부터 재생되며 음악 길이보다 재생된 시간이 길 때는 음악이 끊김 없이 처음부터 반복해서 재생된다. 음악 길이보다 재생된 시간이 짧을 때는 처음부터 재생 시간만큼만 재생된다.
음악이 00:00를 넘겨서까지 재생되는 일은 없다.
조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다.
조건이 일치하는 음악이 없을 때에는 “(None)”을 반환한다.
입력
입력으로 네오가 기억한 멜로디를 담은 문자열 m과 방송된 곡의 정보를 담고 있는 배열 musicinfos가 주어진다.
m은 음 1개 이상 1439개 이하로 구성되어 있다.
musicinfos는 100개 이하의 곡 정보를 담고 있는 배열로, 각각의 곡 정보는 음악이 시작한 시각, 끝난 시각, 음악 제목, 악보 정보가 ‘,’로 구분된 문자열이다.
음악의 시작 시각과 끝난 시각은 24시간 HH:MM 형식이다.
음악 제목은 ‘,’ 이외의 출력 가능한 문자로 표현된 길이 1 이상 64 이하의 문자열이다.
악보 정보는 음 1개 이상 1439개 이하로 구성되어 있다.
출력
조건과 일치하는 음악 제목을 출력한다.
풀이
이 문제만 푸는데 3시간 걸렸다… 프로그래머스 케이스 12번!!😤😤😤
그 한문제 고치는데 1시간 반은 쏟았다 ㅇㅅㅇ. 문제 자체는 쉽게 접근했다. 문자열은 split하고 시간을 integer로 바꿔서 해당 시간 안에 네오가 입력한 문자열이 musicinfos의 악보에 존재하는지만 체크하면 되는 문제라 솔직히 막 어렵다고는 생각이 들지 않았다.
그동안 많지는 않지만 어느정도 카카오 문제를 풀어서인가 바로 메커니즘이 떠올랐다.
그럼 그 12번이 어떤 케이스인가 보자.😏
시간 : 8
m : CDCDF
악보 : CDCDCDF
위 경우를 풀 때 내가 기존에 했던 알고리즘으로 하면 (None)이 뜰 것이다.
세번째 C를 만나면 m은 F에 위치해 있으므로 틀렸다고 인식해서 다시 처음으로 돌아가기 때문이다. 하지만 위 문제의 정답은 O이다. 악보 내에 CDCDF가 존재하므로 정답으로 인식해야 한다. 그 부분만 잘 고려한다면 1시간 이내에서라도 풀 수 있을 것이다.
아 그리고 여기서 stable_sort를 이용했다. 다수의 곡 정보가 조건이 일치하면 제일 긴 음악을 출력해야 하고, 만약 시간도 똑같다면 먼저 입력된 곡을 출력해야 하기 때문에 stable_sort가 적당하다고 생각했다.
코드
프로그래머스 카카오 블라인드 방금그곡 [Level 2] (JAVA)
728×90
문제 설명
방금그곡
라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 ‘방금그곡’ 서비스를 이용하곤 한다. 방금그곡에서는 TV, 라디오 등에서 나온 음악에 관해 제목 등의 정보를 제공하는 서비스이다.
네오는 자신이 기억한 멜로디를 가지고 방금그곡을 이용해 음악을 찾는다. 그런데 라디오 방송에서는 한 음악을 반복해서 재생할 때도 있어서 네오가 기억하고 있는 멜로디는 음악 끝부분과 처음 부분이 이어서 재생된 멜로디일 수도 있다. 반대로, 한 음악을 중간에 끊을 경우 원본 음악에는 네오가 기억한 멜로디가 들어있다 해도 그 곡이 네오가 들은 곡이 아닐 수도 있다. 그렇기 때문에 네오는 기억한 멜로디를 재생 시간과 제공된 악보를 직접 보면서 비교하려고 한다. 다음과 같은 가정을 할 때 네오가 찾으려는 음악의 제목을 구하여라.
방금그곡 서비스에서는 음악 제목, 재생이 시작되고 끝난 시각, 악보를 제공한다.
네오가 기억한 멜로디와 악보에 사용되는 음은 C, C#, D, D#, E, F, F#, G, G#, A, A#, B 12개이다.
각 음은 1분에 1개씩 재생된다. 음악은 반드시 처음부터 재생되며 음악 길이보다 재생된 시간이 길 때는 음악이 끊김 없이 처음부터 반복해서 재생된다. 음악 길이보다 재생된 시간이 짧을 때는 처음부터 재생 시간만큼만 재생된다.
음악이 00:00를 넘겨서까지 재생되는 일은 없다.
조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다.
조건이 일치하는 음악이 없을 때에는 “(None)”을 반환한다.
입력 형식
입력으로 네오가 기억한 멜로디를 담은 문자열 m과 방송된 곡의 정보를 담고 있는 배열 musicinfos가 주어진다.
m은 음 1개 이상 1439개 이하로 구성되어 있다.
1개 이상 1439개 이하로 구성되어 있다. musicinfos는 100개 이하의 곡 정보를 담고 있는 배열로, 각각의 곡 정보는 음악이 시작한 시각, 끝난 시각, 음악 제목, 악보 정보가 ‘,’로 구분된 문자열이다. 음악의 시작 시각과 끝난 시각은 24시간 HH:MM 형식이다. 음악 제목은 ‘,’ 이외의 출력 가능한 문자로 표현된 길이 1 이상 64 이하의 문자열이다. 악보 정보는 음 1개 이상 1439개 이하로 구성되어 있다.
100개 이하의 곡 정보를 담고 있는 배열로, 각각의 곡 정보는 음악이 시작한 시각, 끝난 시각, 음악 제목, 악보 정보가 ‘,’로 구분된 문자열이다.
출력 형식
조건과 일치하는 음악 제목을 출력한다.
입출력 예시
m musicinfos answer “ABCDEFG” [“12:00,12:14,HELLO,CDEFGAB”, “13:00,13:05,WORLD,ABCDEF”] “HELLO” “CC#BCC#BCC#BCC#B” [“03:00,03:30,FOO,CC#B”, “04:00,04:08,BAR,CC#BCC#BCC#B”] “FOO” “ABC” [“12:00,12:14,HELLO,C#DEFGAB”, “13:00,13:05,WORLD,ABCDEF”] “WORLD”
설명
첫 번째 예시에서 HELLO는 길이가 7분이지만 12:00부터 12:14까지 재생되었으므로 실제로 CDEFGABCDEFGAB로 재생되었고, 이 중에 기억한 멜로디인 ABCDEFG가 들어있다.
세 번째 예시에서 HELLO는 C#DEFGABC#DEFGAB로, WORLD는 ABCDE로 재생되었다. HELLO 안에 있는 ABC#은 기억한 멜로디인 ABC와 일치하지 않고, WORLD 안에 있는 ABC가 기억한 멜로디와 일치한다.
728×90
그냥 음계와 #이 붙은 음계를 어떤식으로 확인할 것인지가 주요 포인트인것 같다. 나는 #이 붙은 음표는 소문자로 표시를 해서 C# 을 c 로 나타내는 방법을 사용해서 문제를 해결했다.
import java.util.*; class Solution { class Song implements Comparable
{ String song; int time; int index; public Song(String song, int time, int index){ this.song = song; this.time = time; this.index = index; } @Override public int compareTo(Song s){ // 문제의 조건에 따라서 플레이 시간이 많은순, 먼저나온 순으로 정렬 if(this.time < s.time){ return 1; } else if(this.time==s.time){ return this.index > s.index ? 1 : -1; } else{ return -1; } } } public int calPlaytime(String s, String e){// 플레이 시간을 계산 int play = 0; String[] s_ = s.split(“\\:”); String[] e_ = e.split(“\\:”); play += (Integer.parseInt(e_[0]) – Integer.parseInt(s_[0]))*60; play += (Integer.parseInt(e_[1]) – Integer.parseInt(s_[1])); return play; } public boolean calSamesong(int time, String m, String song){//플레이 시간동안 들은 음계가 있으면 true 반환 String play = “”; //time 동안 play된 모든 음표 int index = 0; int t = 1; while(t<=time){ if(index==song.length()){ index = 0; } play += song.charAt(index); index++; t++; } if(play.contains(m)){ return true; } else{ return false; } } public String change(String str){// #이 붙은 음계를 소문자로 변환 String temp = str; temp = temp.replaceAll("C#","c"); temp = temp.replaceAll("D#","d"); temp = temp.replaceAll("F#","f"); temp = temp.replaceAll("G#","g"); temp = temp.replaceAll("A#","a"); return temp; } public String solution(String m, String[] musicinfos) { ArrayList list = new ArrayList<>(); for(int i=0; i
[프로그래머스] 17683 방금그곡(2018 카카오 블라인드)
1. 문제
https://programmers.co.kr/learn/courses/30/lessons/17683
2. 접근방법
이 문제 역시 문자열 관리를 잘해주면 된다.
먼저 사용되는 각 문자열중에 C# 과 같이 #이 붙은 친구들은 길이는 2인데 음은 하나이므로
계산시에 불편함이 있다.
그래서 C#과 같은 음들은 소문자로 변경하여 풀이하였다.
사전작업을 마친 뒤 풀이를 진행해 보면
1. 플레이타임 구하기
2. 플레이타임에 맞춰 총 실행된 음들 구하기
3. 네오가 구한 멜로디가 포함되었는지 contains함수로 비교
4. 기존에 찾은 멜로디와 플레이타임 비교하여 정답 저장
5. 끝~
위 순서대로 진행하면 된다.
3. 자바 코드
public class P17683방금그곡 { public String solution(String m, String[] musicinfos) { m = changeShap(m); int time = 0; String answer = “(None)”; for (String music : musicinfos) { String[] musicinfo = music.split(“,”); int H1 = Integer.parseInt(musicinfo[0].substring(0, 2)); int M1 = Integer.parseInt(musicinfo[0].substring(3, 5)); int H2 = Integer.parseInt(musicinfo[1].substring(0, 2)); int M2 = Integer.parseInt(musicinfo[1].substring(3, 5)); int playtime = (H2 – H1) * 60 + M2 – M1; String sound = changeShap(musicinfo[3]); String fullSound = “”; for (int i = 0; i < playtime; i++) fullSound += sound.charAt(i % sound.length()); if (fullSound.contains(m)) { if (time >= playtime) continue; answer = musicinfo[2]; time = playtime; } } return answer; } public String changeShap(String s) { StringBuilder sb = new StringBuilder(s); for (int i = 0; i < sb.length(); i++) if (sb.charAt(i) == '#') sb.replace(i - 1, i + 1, "" + (char)(sb.charAt(i-1) + 32)); return sb.toString(); } } 4. 마치며 처음엔 문자열 비교를 어떻게 해야하나 KMP를 직접구현해야하나.. 하고 막막했는데 생각해보니 잘 짜놓은 contains함수가 있는데 굳이 저 알고리즘을 구현하고 있는 것이 시간낭비구나라는 것을 깨달았다. 728x90
프로그래머스 카카오 2018 3차 방금그곡
728×90
내가푼방식
function solution(m, musicinfos) { var answer=[]; var numb=[]; for(var i=0; i< musicinfos.length; i++){ var b= musicinfos[i].split(","); var totalmusicplay=0; var end= (b[1].substr(0,2)/1)*60 +(b[1].substr(3,2)/1); var start= (b[0].substr(0,2)/1)*60 +(b[0].substr(3,2)/1); var playinghour = end-start var hour = 0; var min =0; var playingpart='' ; var leftpart=0; var playingleftpart=''; hour = Math.floor(playinghour/60); min = playinghour%60; totalmusicplay = 60*hour+min if(b[3].match(/[A-Z]#/gi)!==-1){ b[3] = b[3].replace(/C#/gi, "c"); b[3]= b[3].replace(/D#/gi, "d"); b[3] = b[3].replace(/F#/gi, "f"); b[3] = b[3].replace(/G#/gi, "g"); b[3] = b[3].replace(/A#/gi, "a"); } if(m.match(/[A-Z]#/gi)!==-1){ m = m.replace(/C#/gi, "c"); m= m.replace(/D#/gi, "d"); m = m.replace(/F#/gi, "f"); m = m.replace(/G#/gi, "g"); m = m.replace(/A#/gi, "a"); } playingpart = b[3].substr(0,totalmusicplay) leftpart = totalmusicplay - b[3].length while(leftpart>0){ playingleftpart=b[3].substr(0,leftpart) playingpart+=playingleftpart; leftpart= leftpart-b[3].length; } let reg = new RegExp(`${m}`,”g”) console.log(reg) if(playingpart.match(reg)!==null) { answer.push([b[2], totalmusicplay]); numb.push(totalmusicplay) } if(i===musicinfos.length-1){ if(answer.length>1 ){ return answer[numb.indexOf(Math.max(…numb))][0] } else if(answer.length===1 ) { return answer[0][0]; } return “(None)”; } } }
접근방법
자바스크립트의 내장함수를 이용하여 배열과 문자열을 정수로 바꿔주는 법을 생각해보았고,
음에 해당하는 #부분을 정규식을 이용하여 소문자 로바꿔주었다. 이는 match 를할시 #까지 포함해서 안읽기때문에 앞에가 다맞으면 #이 있어야 맞는부분도 다 맞다고 된다. 따라서 #이붙은 값은 고유의 값 하나로 묶어야함으로 해당하는 정규식이 #을 가질때 replace로 소문자 하나로 바꾸어주었다.
코드풀이
방금그곡 C++ 2018 KAKAO Blind Recruitment
문제 설명
방금그곡
라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 ‘방금그곡’ 서비스를 이용하곤 한다. 방금그곡에서는 TV, 라디오 등에서 나온 음악에 관해 제목 등의 정보를 제공하는 서비스이다.
네오는 자신이 기억한 멜로디를 가지고 방금그곡을 이용해 음악을 찾는다. 그런데 라디오 방송에서는 한 음악을 반복해서 재생할 때도 있어서 네오가 기억하고 있는 멜로디는 음악 끝부분과 처음 부분이 이어서 재생된 멜로디일 수도 있다. 반대로, 한 음악을 중간에 끊을 경우 원본 음악에는 네오가 기억한 멜로디가 들어있다 해도 그 곡이 네오가 들은 곡이 아닐 수도 있다. 그렇기 때문에 네오는 기억한 멜로디를 재생 시간과 제공된 악보를 직접 보면서 비교하려고 한다. 다음과 같은 가정을 할 때 네오가 찾으려는 음악의 제목을 구하여라.
방금그곡 서비스에서는 음악 제목, 재생이 시작되고 끝난 시각, 악보를 제공한다.
네오가 기억한 멜로디와 악보에 사용되는 음은 C, C#, D, D#, E, F, F#, G, G#, A, A#, B 12개이다.
각 음은 1분에 1개씩 재생된다. 음악은 반드시 처음부터 재생되며 음악 길이보다 재생된 시간이 길 때는 음악이 끊김 없이 처음부터 반복해서 재생된다. 음악 길이보다 재생된 시간이 짧을 때는 처음부터 재생 시간만큼만 재생된다.
음악이 00:00를 넘겨서까지 재생되는 일은 없다.
조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다.
조건이 일치하는 음악이 없을 때에는 “(None)”을 반환한다.
입력 형식
입력으로 네오가 기억한 멜로디를 담은 문자열 m과 방송된 곡의 정보를 담고 있는 배열 musicinfos가 주어진다.
m은 음 1개 이상 1439개 이하로 구성되어 있다.
1개 이상 1439개 이하로 구성되어 있다. musicinfos는 100개 이하의 곡 정보를 담고 있는 배열로, 각각의 곡 정보는 음악이 시작한 시각, 끝난 시각, 음악 제목, 악보 정보가 ‘,’로 구분된 문자열이다. 음악의 시작 시각과 끝난 시각은 24시간 HH:MM 형식이다. 음악 제목은 ‘,’ 이외의 출력 가능한 문자로 표현된 길이 1 이상 64 이하의 문자열이다. 악보 정보는 음 1개 이상 1439개 이하로 구성되어 있다.
100개 이하의 곡 정보를 담고 있는 배열로, 각각의 곡 정보는 음악이 시작한 시각, 끝난 시각, 음악 제목, 악보 정보가 ‘,’로 구분된 문자열이다.
출력 형식
조건과 일치하는 음악 제목을 출력한다.
입출력 예
m musicinfos answer “ABCDEFG” [“12:00,12:14,HELLO,CDEFGAB”, “13:00,13:05,WORLD,ABCDEF”] “HELLO” “CC#BCC#BCC#BCC#B” [“03:00,03:30,FOO,CC#B”, “04:00,04:08,BAR,CC#BCC#BCC#B”] “FOO” “ABC” [“12:00,12:14,HELLO,C#DEFGAB”, “13:00,13:05,WORLD,ABCDEF”] “WORLD”
설명
첫 번째 예시에서 HELLO는 길이가 7분이지만 12:00부터 12:14까지 재생되었으므로 실제로 CDEFGABCDEFGAB로 재생되었고, 이 중에 기억한 멜로디인 ABCDEFG가 들어있다.
세 번째 예시에서 HELLO는 C#DEFGABC#DEFGAB로, WORLD는 ABCDE로 재생되었다. HELLO 안에 있는 ABC#은 기억한 멜로디인 ABC와 일치하지 않고, WORLD 안에 있는 ABC가 기억한 멜로디와 일치한다.
구현
문제 자체의 난이도는 크게 높지 않은 편에 속한다. 하지만 항상 카카오 문제들이 그러하듯 문자열 처리에 대한 부분을 쉽고 빠르게 해결해낼 수 있는가, 문제에 주어진 조건들을 잘 파악하고 있는가 등을 중점적으로 보는 문제인 것 같다.
해당 문제는 크게 3가지 파트로 구성된다.
입력으로 들어온 문자열에 대한 처리 #에 대한 처리와 멜로디를 재생시간만큼 표현하는 것 예외처리
3가지 다 코딩을 어느 정도만 해왔다고 하더라도 쉽게 파악할 수 있는 부분이기도 할뿐더러 그렇게 어려운 부분도 없다. 따라서 얼마나 적절한 자료구조를 사용하고 얼마나 빨리 문제를 파악하고 해결하는지에 대한 부분을 검사하는 문제인 것 같다.
우선 입력으로 들어온 musicinfos를 “, “로 나누어 infos 벡터에 새롭게 저장해준다.
vector
> infos(musicinfos.size()); for (int i = 0; i < musicinfos.size(); i++) { stringstream ss(musicinfos[i]); string temp; while (getline(ss, temp, ',')) infos[i].push_back(temp); } 다만 이때 m과 musicinfos에서 C#, D#, F#, G#, A# 같은 경우에는 문자를 두 개씩 처리해줘야 하기 때문에 각 알파벳에 10을 더하여 새롭게 저장해주었다. for (int i = 0; i < infos.size(); i++) { for (int j = 0; j < infos[i][3].size();) { if (infos[i][3][j + 1] == '#') { infos[i][3][j] += 10; infos[i][3].erase(infos[i][3].begin() + j + 1); } else j++; } } for (int i = 0; i < m.size();) { if (m[i + 1] == '#') { m[i] += 10; m.erase(m.begin() + i + 1); } else i++; } 다음은 infos vector에 들어간 시간을 처리하기 위하여 ":"를 구분자로 나누어준 후에 시간을 계산하여 times vector에 저장해주었다. for (int i = 0; i < infos.size(); i++) { stringstream ss1(infos[i][0]); stringstream ss2(infos[i][1]); int t1 = 0; int t2 = 0; string temp1; string temp2; while (getline(ss1, temp1, ':')) t1 = (t1 * 60) + stoi(temp1); while (getline(ss2, temp2, ':')) t2 = (t2 * 60) + stoi(temp2); times.push_back(abs(t2 - t1)); } 입력으로 들어온 music infos에 대한 가공처리가 끝난 후에는 musicinfos의 멜로디를 시간만큼 따로 저장해주어야 한다. vector temp(infos.size()); for (int i = 0; i < infos.size(); i++) { for (int j = 0; j < times[i]; j++) { temp[i].push_back(infos[i][3][j % (infos[i][3].size())]); } } 마지막으로 길이만큼 멜로디가 재생된 것을 저장해둔 temp vector를 m으로 탐색하며 두 가지 예외조건을 만족시키도록 결과를 도출해낸다. 조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다. 조건이 일치하는 음악이 없을 때에는 “(None)”을 반환한다. int max = 0; for (int i = 0; i < temp.size(); i++) { if (temp[i].find(m) != string::npos && times[i] > max) { max = times[i]; answer = infos[i][2]; } } if (answer == “”) answer = “(None)”; return answer; 전체 코드는 아래에서 볼 수 있다.
#include
#include #include #include #include using namespace std; string solution(string m, vector musicinfos) { string answer = “”; vector > infos(musicinfos.size()); for (int i = 0; i < musicinfos.size(); i++) { stringstream ss(musicinfos[i]); string temp; while (getline(ss, temp, ',')) infos[i].push_back(temp); } for (int i = 0; i < infos.size(); i++) { for (int j = 0; j < infos[i][3].size();) { if (infos[i][3][j + 1] == '#') { infos[i][3][j] += 10; infos[i][3].erase(infos[i][3].begin() + j + 1); } else j++; } } for (int i = 0; i < m.size();) { if (m[i + 1] == '#') { m[i] += 10; m.erase(m.begin() + i + 1); } else i++; } vector times; for (int i = 0; i < infos.size(); i++) { stringstream ss1(infos[i][0]); stringstream ss2(infos[i][1]); int t1 = 0; int t2 = 0; string temp1; string temp2; while (getline(ss1, temp1, ':')) t1 = (t1 * 60) + stoi(temp1); while (getline(ss2, temp2, ':')) t2 = (t2 * 60) + stoi(temp2); times.push_back(abs(t2 - t1)); } vector temp(infos.size()); for (int i = 0; i < infos.size(); i++) { for (int j = 0; j < times[i]; j++) { temp[i].push_back(infos[i][3][j % (infos[i][3].size())]); } } int max = 0; for (int i = 0; i < temp.size(); i++) { if (temp[i].find(m) != string::npos && times[i] > max) { max = times[i]; answer = infos[i][2]; } } if (answer == “”) answer = “(None)”; return answer; }
[프로그래머스 17683] – 카카오 방금그곡
반응형
문제출처
https://programmers.co.kr/learn/courses/30/lessons/17683
문제풀이
문제에서 주어진 조건대로 문자열 처리를 하고 구현하면 되는 문제다. 여기서 핵심은 #이 붙은 문자 처리 방법이라고 생각한다. 본인은 #이붙은 문자를 convertSound(String m) 메서드를 통해 소문자로 치환한뒤 구현했다. 또한 나중에 악보를 생성할때를 생각해서 곡의 재생시간을 구할때 단위를 분으로 통일했다.
이 문제는 오해의 소지가 있다고 생각한다. 지문에서 `(None)`을 리턴한다고 했는데 실제로는 `(None)`이 아니라 (None)을 리턴해줘야 하기 때문이다.
소스코드
https://github.com/sw93/algorithm/blob/master/Programmers/%EC%B9%B4%EC%B9%B4%EC%98%A4%20-%20%EB%B0%A9%EA%B8%88%EA%B7%B8%EA%B3%A1.java
class Solution { // #이 붙은 음을 소문자로 치환 private String convertSound(String m) { m = m.replaceAll(“C#”, “c”); m = m.replaceAll(“D#”, “d”); m = m.replaceAll(“F#”, “f”); m = m.replaceAll(“G#”, “g”); m = m.replaceAll(“A#”, “a”); return m; } // 곡의 재생시간을 분으로 환산 private int getRunningTime(String startInfo, String endInfo) { int runningTime = 0; int startHour = Integer.parseInt(startInfo.split(“:”)[0]); int startMinute = Integer.parseInt(startInfo.split(“:”)[1]); int endHour = Integer.parseInt(endInfo.split(“:”)[0]); int endMinute = Integer.parseInt(endInfo.split(“:”)[1]); return (endHour – startHour) * 60 + (endMinute – startMinute); } // 재생 시간만큼 재생해 악보를 만듬 private String playMusic(String sound, int runningTime) { StringBuilder sb = new StringBuilder(); int soundLength = sound.length(); for (int i=0; i
maxRunningTime) { answer = musicName; maxRunningTime = runningTime; } } return answer; } } 반응형
키워드에 대한 정보 카카오 방금 그곡
다음은 Bing에서 카카오 방금 그곡 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 카카오 코딩테스트 풀이 2 – 방금 그곡 [2018 KAKAO BLIND]
- 카카오 코딩테스트
- 카카오 알고리즘
- 코딩테스트
- 알고리즘 풀이
- 알고리즘
카카오 #코딩테스트 #풀이 #2 #- # #방금 #그곡 #[2018 #KAKAO #BLIND]
YouTube에서 카카오 방금 그곡 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 카카오 코딩테스트 풀이 2 – 방금 그곡 [2018 KAKAO BLIND] | 카카오 방금 그곡, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.