Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 인사이드아웃
- 웅진씽크빅
- 프로젝트캠프
- ip
- 메모리
- React.js
- 자바스크립트
- 타입스크립트
- 리액트
- 해시
- 스레드
- BFS
- CS
- 네트워크
- IT개발캠프
- html
- 프로그래머스
- 유데미
- react-query
- Algorithm
- #프로젝트캠프 #프로젝트캠프후기 #유데미 #스나이퍼팩토리 #웅진씽크빅 #인사이드아웃 #IT개발캠프 #개발자부트캠프 #리액트 #react #부트캠프 #리액트캠프
- 스나이퍼팩토리
- 프로세스
- App Runner
- javascript
- cs #네트워크
- react
- 알고리즘
- typescript
- 개발자부트캠프
Archives
- Today
- Total
Bin's Blog
[프로그래머스] Level2 - 방금그곡(Javascript) 본문
728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
▶ 문제 요약
1. 방금그곡 서비스에 음악 제목, 재생이 시작되고 끝난 시각, 악보를 제공한다.
2. 네오가 기억한 멜로디와 악보에 사용되는 음은 C, C#, D, D#, E, F, F#, G, G#, A, A#, B 12개이다.
3. 각 음은 1분에 1개씩 재생된다. 음악은 반드시 첨부터 재생되며 음악 길이보다 재생된 시간이 길 때는 음악이 끊김 없이 처음부터 반복해서 재생된다. 음악 길이보다 재생된 길이가 짧을 때는 처음부터 재생 시간만큼만 재생된다.
4. 조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다.
5. 조건이 일치하는 음악이 없을 때에는 "(None)"을 반환한다.
▶ 정답 코드
function solution(m, musicinfos) {
let answer = "";
let maxTime = 0;
// 정규 표현식을 활용해서 뒤에 #이 붙어있으면 #을 없애고 앞에 글자를 소문자로 바꾼다.
m = m.replace(/([A-G])#/g, (match) => match[0].toLowerCase());
for (const music of musicinfos) {
// ,기준으로 나누기
let split = music.split(",");
let [start, end, title, note] = split;
// 시간이랑 분을 나누기
const [startHour, startMinute] = start.split(":").map(Number);
const [endHour, endMinute] = end.split(":").map(Number);
// 재생시간
let playingTime = (endHour - startHour) * 60 + (endMinute - startMinute);
// note도 #이 있는 악보 소문자로 바꾸기
note = note.replace(/([A-G])#/g, (match) => match[0].toLowerCase());
let noteLength = note.length;
let melody = "";
// 현재 재생시간이 악보의 길이보다 크면
if (playingTime > noteLength) {
// 악보가 완전히 재생되는 횟수
let repeatCount = Math.floor(playingTime / noteLength);
// 완전히 재생되지 않고 일부만 재생되는 악보의 길이
let remainder = playingTime % noteLength;
// 최종 멜로디 만들기
melody = note.repeat(repeatCount) + note.slice(0, remainder);
// 음악 길이보다 재생된 시간이 짧으면 재생 시간만큼만 재생된다.
} else {
melody = note.slice(0, playingTime);
}
// 다 만들어진 멜로디에 음이 맞는지 체크
if (melody.includes(m)) {
// 재생된 시간이 가장 긴 음악을 찾기
if (playingTime > maxTime) {
maxTime = playingTime;
answer = title;
}
}
}
// 조건이 일치하는 음악 없으면 None 출력
return answer || "(None)"
}
728x90
'Algorithm' 카테고리의 다른 글
[프로그래머스] Level2 - 행렬 테두리 회전하기(Javascript) (0) | 2023.05.19 |
---|---|
[프로그래머스] Level2 - 수식 최대화(Javascript) (0) | 2023.05.16 |
[프로그래머스] Level2 - 괄호 변환(Javascript) (0) | 2023.05.10 |
[프로그래머스] Level2 - 연속된 부분 수열의 합(Javascript) (0) | 2023.05.10 |
[프로그래머스] Level2 - 택배상자(Javascript) (0) | 2023.05.05 |