개발의변화
5월 30일 알고리즘 연습 본문
반응형
1. 요격 시스템
https://school.programmers.co.kr/learn/courses/30/lessons/181188
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(targets) {
targets.sort((a,b)=>a[1]-b[1]) //오름차순
let prev = -1
let answer = 0;
for (target of targets) {
const [start,end] = target
if (prev <= start) {
prev = end
answer++
}
}
return answer
}
라인을 생각하자
정렬을 해서 end가 낮은 라인부터 순회하면서 라인이 포함할 수 없을 때 다음 라인으로 갈아타는 방식으로 짠다
https://school.programmers.co.kr/learn/courses/30/lessons/176962
function solution(plans) {
let stop = []
let answer =[]
const timeToNum = (str) => {
return parseInt(str.split(":").join(""))
}
plans=plans.map(e=>[e[0],timeToNum(e[1]),timeToNum(e[2])]).sort((a,b)=>a[1]-b[1])
let now = [plans[0]]
for(let i = 1; i < plans.length; i++) {
let [nowSubject,nowTime,nowPlaytime] = plans[i]
let [subject,time,playtime]=now.pop()
let takeTime= (Math.floor(nowTime/100)-Math.floor(time/100))*60+nowTime%100-time%100
if(playtime >takeTime) {
//시간이 남아있는 경우
stop.push([subject,time,playtime-takeTime])
}
else {
//시간을 다 쓴 경
answer.push(subject)
let restTime = takeTime-playtime
while(stop.length>0) {
const [stopSubject,stopTime,stopPlaytime] = stop.pop()
if (stopPlaytime > restTime) {
stop.push([stopSubject,stopTime,stopPlaytime-restTime])
break;
}
else {
restTime -= stopPlaytime
answer.push(stopSubject)
}
}
}
now.push(plans[i])
}
answer.push(now[now.length-1][0])
while (stop.length) {
answer.push(stop.pop()[0])
}
return answer;
}
구현문제인데 까다로웠다 문제를 잘 읽고 분기처리를 잘하자
반응형
'알고리즘' 카테고리의 다른 글
프로그래머스 LV3 연속 펄스 부분 수열의 합 (0) | 2024.02.13 |
---|---|
2023 현대모비스 알고리즘대회 에어컨 (0) | 2023.09.26 |
프로그래머스 LV2 연속된 부분의 수열의 합 (0) | 2023.04.18 |
프로그래머스 LV2 질문목록 (0) | 2023.04.16 |
프로그래머스 LV2 삼각 달팽이 (0) | 2023.04.14 |