9시부터 12시까지 제한시간을두고 시험을 보는날이다. 문제는 프로그래머스에서 제공된 문제였다.(2018 카카오출제문제라한다.) 일단 문제이해하는데 한 10분정도 걸린것같다. 그리고 노트에다가 어떻게 로직을 구성할지를 생각해보고 정확하게 짜여지지않는이상 코드를 작성하지않았다. 한 20분정도 문제구상을하고 그래도 방향은 잡고 코드를 작성했다. 함수를 한 3개정도 작성했는데 이렇게 solution함수 외에 다른 함수를 작성해서 사용한적은 손에 꼽았던것같다.
우선 시간을 많이잡아먹었던 부분은 디버깅을하면서 작성하지않았던점. 프로젝트를하던 알고리즘 문제를 풀던 디버깅은 필수라는걸 다시한번느꼇다. 그래서 재생시간을 계산할때 형변환을 해주지않아 값의 오류가발생했고, 함수에서 함수로 값이 전달되는과정에서 오류가발생했었다.
그리고 테스트코드예시3번 상황을 간과한점. #을하나로 묶어야한다는 생각을 못했었다. 일단 묶어야한다는 생각은 들었지만 어떻게 묶어서 처리를 해야할지 생각이 난지않아 반복문을돌때 #을 만나면 총 길이를 1증가시켜 한번더 돌게만들었다. 그렇게해서 총 멜로디의 길이를구하고 기억한 멜로디와 대조를할떄 기억한 멜로디 맨 마지막인덱스 다음인덱스의 총멜로디값이 #이 포함된다면 일치하지않는값으로 반환을해서 해결해보려했으나.. 우선 테스트 케이스는 모두 통과가되나 또다른 반례가 있는것같다. 딱 봐도 상당히 불안한 코드이긴하나.. 이 코드를 개선해서 해결해보고싶다... 이부분은 우선 해설을보고 어떤 예외가있는지 찾아보고 다시와서 이 코드로 해결해보려한다.
function convertToMin (time) {
return +time[0]*600 + +time[1]*60 + +time[3]*10 + +time[4];
}
function analyzeMusic (musicinfo,userCode) {
const MusicArray = musicinfo.split(',');
const startT = convertToMin(MusicArray[0]);
const endT = convertToMin(MusicArray[1]);
let runtime = endT-startT;
const musicTitle = MusicArray[2];
const musicCode = MusicArray[3];
let count = 0;
let totalCode = '';
for(let i = 0; i<runtime; i++) {
if(count == musicCode.length) count = 0;
if(musicCode[count] =="#") runtime++;
totalCode += musicCode[count];
count++;
}
let judge =totalCode.indexOf(userCode);
if(judge !== -1) {
const newTotalCode = totalCode.slice(totalCode.indexOf(userCode));
if(newTotalCode[userCode.length] === "#") judge = -1;
}
const analyzeInfo = {runtime : runtime, judge: judge, musicTitle : musicTitle};
return analyzeInfo;
}
function solution(m, musicinfos) {
let answer = '';
let mymusicInfo = {runtime : 0, judge: 1, musicTitle : "AQACS"};
for(const musicinfo of musicinfos ) {
const newMusicInfo = analyzeMusic(musicinfo,m);
let NewMymusicInfo = compareMusic(mymusicInfo,newMusicInfo);
mymusicInfo = NewMymusicInfo;
}
return answer = mymusicInfo.musicTitle;
}
function compareMusic (pre,cur) {
if(cur.judge === -1)
{
return pre;
}
else {
if(pre.runtime >= cur.runtime) return pre;
else {
return cur;
}
}
}
확실히 다시한번 느끼지만 괜히 코딩테스트를 여러 회사나 유명 부트캠프에서 보는게 다 이유가있는것같다. 뭐 전체적인 웹에대한 지식은 판단할 수 없을지라도, 이 코딩테스트를통한 그사람의 문제해결능력만보면 어쩌면 나머지 부족한 개념을 채우고자 하는 의지는 어느정도 보장된다고 생각해도 되서 채용하는 사람입장에선 확률이 높은 선택지인건 분명한것같다.