Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 셀러리
- jwt 표준
- 크롤링
- 레디스 동시성
- 디버깅
- JPA
- langgraph
- 쿠키
- 추천 검색 기능
- AWS
- 결제서비스
- 완전탐색
- 구현
- gRPC
- 백준
- ai agent
- 이분탐색
- ipo 매매자동화
- 몽고 인덱스
- 트랜잭샨
- spring event
- 프로그래머스
- docker
- 아키텍쳐 개선
- 누적합
- 카카오
- piplining
- next-stock
- BFS
- 검색어 추천
Archives
- Today
- Total
코딩관계론
[PCCP 기출문제] 1번 / 동영상 재생기 본문
반응형
문제 이해하기
- next 연산이 있을 시 + 10초
- prev 연산이 있을 시 - 10초
- 다만 최소 0초에서 최대 video_len 까지만 이동이 가능함
- 오프닝 구간에 있을 경우에는 오프닝의 마지막 시간으로 이동해야 한다.
문제 해결 방법 설명하기
1. 초로 통일
코드
function changeSec(time){
let [min, sec] = time.split(':').map(Number)
return min * 60 + sec
}
function secToMin(time){
min = Math.floor(time / 60)
sec = time % 60
if(min < 10){
min = `0${min}`
}
if(sec < 10){
sec = `0${sec}`
}
return `${min}:${sec}`
}
function solution(video_len, pos, op_start, op_end, commands) {
var answer = '';
video_len = changeSec(video_len)
pos = changeSec(pos)
op_start = changeSec(op_start)
op_end = changeSec(op_end)
for (let command of commands){
if (op_start <= pos && pos <= op_end){
pos = op_end
}
if (command === 'prev'){
pos = Math.max(pos - 10, 0)
}
if(command === 'next'){
pos = Math.min(pos + 10, video_len)
}
}
if (op_start <= pos && pos <= op_end){
pos = op_end
}
return secToMin(pos);
}
코드 리뷰
function toSeconds(time) {
const [minute, second] = time.split(":");
return minute * 60 + Number(second);
}
function solution(video_len, pos, op_start, op_end, commands) {
let position = toSeconds(pos);
const videoLen = toSeconds(video_len);
const opStart = toSeconds(op_start);
const opEnd = toSeconds(op_end);
if (opStart <= position && position <= opEnd) position = opEnd;
commands.forEach((command) => {
position += command === "next" ? 10 : -10;
position = Math.max(0, Math.min(position, videoLen));
if (opStart <= position && position <= opEnd) position = opEnd;
});
const minute = Math.floor(position / 60).toString().padStart(2, "0");
const second = (position % 60).toString().padStart(2, "0");
return minute + ":" + second;
}
배운점 정리하기
나의 코드를 확인해보면 오프닝 구간을 건너띄기 위해서 매번 계산하고 있는데, 잘 생각해보면 그럴 필요가 없다
for 진입 전에 오프닝 구간인지를 판별한 후, 반복문이 끝나는 구간에서 오프닝 구간 판별 연산을 수행하게 된다면, 항상 오프닝 인지 판별될 수 있기 때문에 불필요한 코드를 줄일 수 있다.
또한 padStart 문법 역시 잘 배웠다.
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[PCCP 기출문제] 1번 / 붕대 감기도움말 (0) | 2025.04.27 |
---|---|
[카카오] 두 큐 합 같게 만들기 (0) | 2024.08.23 |
[과제테스트] 게임 승률 조회하기(python) (0) | 2024.05.19 |
[백준]AC (0) | 2024.05.11 |
[백준] 암호 만들기 (0) | 2024.05.07 |