728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/17683#
문제 풀이 방법
이 문제는 구현이 주가되는 문제이며, 주어진 입력을 얼마나 잘 다룰 수 있는가를 확인하는 문제이다.
나는 시작 시간과 끝나는 시간을 계산해서 총 플레이 타임을 구하고, 이름, #이 붙은 코드를 소문자로 바꿔서 저장했다.
이 문제에서 중요한것은 #이 붙은 코드를 대체 가능한 문자(소문자)로 대체해 계산해주는 것인거 같다.
내가 위의 방식으로 안풀었을 때는 60점을 받았다.
const solution = (m, musicinfos) => {
let infos = musicinfos.map(e => e.split(','));
let answer = [];
infos.forEach((e, i) => {
let [st, end, name, eum] = e;
let stTime = st.split(':');
let endTime = end.split(':');
// 시간 계산 => 12:20, 14:00 => 1시간 40분이니 100분으로 계산, 이 시간은 나중에 answer 배열에 2중 배열 형태로 이름과 같이 넣어주자
let playTime = (endTime[0] - stTime[0]) * 60 + (endTime[1] - stTime[1]);
let mueum = '';
for(let i=0; i<playTime; i++){
// 음악 음계 로직 => 기본적으로 for문을 사용하고 새로운 문자열을 만드는데 이때 인덱스 값 계산에서 i % (음악 재생 시간) 으로 작성
mueum += eum[i % eum.length];
}
// 음계 비교 로직 => String.includes() 메서드를 이용해 비교
if(mueum.includes(m) && mueum[mueum.indexOf(m)+m.length] !== '#'){
answer.push([playTime, i, name]);
}
})
console.log(answer.sort((a, b) => b[0] - a[0] && b[1] - a[1]))
return answer.length ? answer.sort((a, b) => b[0] - a[0] && b[1] - a[1])[0][2] : "(None)"
}
그래서 다른 사람들이 작성한 코드를 보고 참고해서 작성했더니 통과했다.....
코드
const solution = (m, musicinfos) => {
let answer = [];
let list = musicinfos.map(e => {
const [st, end, name, code] = e.split(',');
const [stH, stM] = st.split(':');
const [endH, endM] = end.split(':');
const timeGap = (endH - stH) * 60 + (endM - stM);
let editedCode = code.replace(/([A-Z])#/g, (_, group) => group.toLowerCase());
let text = '';
for(let i=0; i<timeGap; i++){
text += editedCode[i % editedCode.length];
}
return [timeGap, name, text];
});
m = m.replace(/([A-Z])#/g, (_, group) => group.toLowerCase());
for(let i=0; i<list.length; i++){
if(list[i][2].includes(m)){
answer.push([list[i][0], i, list[i][1]]);
}
}
answer.sort((a, b) => {
let apt = a[0];
let bpt = b[0];
if(apt > bpt) return -1;
else if(apt < bpt) return 1;
else return 0;
})
if(!answer.length) return '(None)';
return answer[0][2];
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
[JS] 1Level / 연습문제 / 콜라 문제 (1) | 2023.10.17 |
---|---|
[JS] 2Level / 연습문제 / 호텔 대실 (0) | 2023.10.17 |
[JS] 2Level / 연습문제 / 무인도 여행 (0) | 2023.10.12 |
2Level / 2021 KAKAO BLIND RECRUITMENT / 메뉴 리뉴얼 (1) | 2023.10.09 |
2Level / 2022 KAKAO TECH INTERNSHIP / 두 큐 합 같게 만들기 (1) | 2023.10.07 |