-
모각코PS / 카카오 3차 방금 그 곡PS 2022. 7. 23. 11:31
모각코 PS스터디
알고리즘 스터디가 10주차를 맞아 방학에 들어갔습니다.😃
그간 많은 문제를 처음 접해보면서 참 즐거운 시간이었네요. PS 포스팅을 안한지 오래 되었는데... 방학을 기념해서 오랜만에 올려보려고 해요. :)
늘 그렇듯 문제는 알고리즘 대장님께서 선정해주셨습니다.😃문제와 풀이
문제 링크 : 프로그래머스 Lv2 - 방금 그 곡
원 출처 : 카카오 블라인드 신입 공채 3차 - 4번 문제 방금 그 곡👇펼쳐서 코드와 해설 읽기
여러가지 제약 조건을 주의하면, 로직 자체는 크게 어려울 것이 없습니다.
public class Nick { public String solution(String m, String[] musicinfos) { String result = "(None)"; // 반환값 int longestRunningTime = 0; // 일치한 곡이 재생된 시간 m = sharpToLower(m); // 네오가 들은 멜로디 for (int i = 0; i < musicinfos.length; i++) { String[] info = musicinfos[i].split(","); // 필요한 변수 만들기: 재생시간, 제목, 악보, 곡 길이, 재생된 악보 int runningTime = getRunningTime(info[0], info[1]); String title = info[2]; String notes = sharpToLower(info[3]); int songTime = notes.length(); String playNotes = getPlayNotes(notes, runningTime, songTime); // 비교 if (playNotes.contains(m)) { if ("(None)".equals(result)) { // 처음 일치하는 경우, 무조건 업데이트 result = title; longestRunningTime = runningTime; } else { // 두번째 일치부터는, 재생된 시간이 더 길 경우에만 업데이트 if (longestRunningTime < runningTime) { result = title; longestRunningTime = runningTime; } } } } return result; } String sharpToLower(String str) { str = str.replace("C#", "c"); str = str.replace("D#", "d"); str = str.replace("F#", "f"); str = str.replace("G#", "g"); str = str.replace("A#", "a"); return str; } int getRunningTime(String time1, String time2) { String[] t1 = time1.split(":"); String[] t2 = time2.split(":"); int startTime = (Integer.parseInt(t1[0]) * 60) + Integer.parseInt(t1[1]); int endTime = (Integer.parseInt(t2[0]) * 60) + Integer.parseInt(t2[1]); return endTime - startTime; } String getPlayNotes(String notes, int runningTime, int songTime) { int playCount = runningTime / songTime; int remainNotesCount = runningTime % songTime; String tmp = ""; for (int i = 0; i < playCount; i++) { tmp += notes; } tmp += notes.substring(0, remainNotesCount); return tmp; } }
마무리
1트에 못풀었습니다.
여러가지 제약조건의 향연에 휩쓸려서 그만 for/if문 파티를 벌인 것입니다. 🤣
출제자의 의도인지 뭔지 모르겠지만 여튼 1시간 쯤 코딩을 하다 보니 '이젠 나도 무슨 말을 하는지 모르겠어' 상태가 되어서 IDE를 닫고 잠을 잤습니다.토요일 아침 집 주변 카페로 나가서 2트에 시도했습니다. 작성했던 코드는 전부 지웠습니다.
다만 전날 밤 삽질을 하면서 머릿속에 새겨진 여러가지 제약 조건들 만큼은 선명했습니다.
그것들을 하나씩 코드로 옮겼고 금세 완성할 수 있었어요.제약조건이 많을 때에는 어떤 제약이 우선하는지, 언제 만족해야 하는지 확실히 선후관계를 두고 코딩해야 한다는 점을 배웠습니다.
실제 코딩테스트 때는 더욱 마음이 급할 텐데... 차분히 풀 수 있도록 연습을 해야겠다는 생각이 들었습니다.😁'PS' 카테고리의 다른 글
최소신장트리: 백준 9372 상근이의 여행 (0) 2022.07.23 모각코PS / 백준 2110 공유기 설치 (0) 2022.06.22 모각코PS / 프로그래머스 Lv3 단어 변환 & Leetcode 127 Word Ladder (0) 2022.06.11 모각코PS / 백준 2178 미로 탐색 (0) 2022.06.11 모각코PS / 백준 1260 DFS와 BFS (0) 2022.06.11 동전 교환 알고리즘: 주어진 화폐로 특정 금액 만드는 경우의 수 구하기 (0) 2022.06.02