728x90
SMALL
프로그래머스 문제 풀이: [PCCP 기출문제] 1번 - 동영상 재생기
문제 설명:
동영상의 길이와 현재 재생 위치, 조작 가능한 구간 및 사용자 조작 리스트가 주어질 때, 조작이 끝난 후의 최종 재생 위치를 반환하는 문제입니다. 재생 위치는 특정 구간에서 강제로 끝 지점으로 이동하거나 동영상의 시작과 끝을 넘을 수 없습니다.
문제 해결 코드
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 시간 문자열을 초 단위로 변환하는 함수
int cal(string s) {
int sum = 0;
string temp = "";
for (char ch : s) {
if (ch == ':') {
sum += stoi(temp) * 60; // 분 단위 변환
temp = "";
} else {
temp += ch;
}
}
sum += stoi(temp); // 초 단위 추가
return sum;
}
string solution(string video_len, string pos, string op_start, string op_end, vector c) {
int len = cal(video_len); // 동영상 전체 길이를 초 단위로 변환
int p = cal(pos); // 현재 재생 위치를 초 단위로 변환
int st = cal(op_start); // 조작 불가능 구간 시작점
int en = cal(op_end); // 조작 불가능 구간 끝점
// 초기 위치가 조작 불가능 구간 내에 있는 경우
if (st <= p && p <= en) {
p = en; // 강제로 끝 지점으로 이동
}
// 사용자 조작 처리
for (string command : c) {
if (command == "next") {
p += 10; // 10초 앞으로
if (p > len) {
p = len; // 동영상 끝 초과 방지
}
} else {
p -= 10; // 10초 뒤로
if (p < 0) {
p = 0; // 동영상 시작 초과 방지
}
}
// 조작 불가능 구간 내에 들어가면 끝 지점으로 이동
if (st <= p && p <= en) {
p = en;
}
}
// 초 단위를 "MM:SS" 형식의 문자열로 변환
string ans = "";
int minutes = p / 60;
int seconds = p % 60;
ans += (minutes < 10 ? "0" : "") + to_string(minutes);
ans += ":";
ans += (seconds < 10 ? "0" : "") + to_string(seconds);
return ans;
}
코드 설명
- 핵심 알고리즘: 입력된 시간을 초 단위로 변환하여 조작 과정을 쉽게 구현합니다. 각 조작이 끝날 때마다 재생 위치를 업데이트하며, 조작 불가능 구간에 들어갈 경우 강제로 끝 지점으로 이동합니다.
- 구현 세부사항:
- `cal` 함수는 "MM:SS" 형식의 시간을 초 단위로 변환하여 연산을 단순화합니다.
- 현재 위치가 조작 불가능 구간에 들어가면 강제로 `op_end`로 이동합니다.
- 사용자 입력 조작("next" 또는 "prev")에 따라 위치를 업데이트하며, 동영상 시작과 끝을 초과하지 않도록 조건문으로 처리합니다.
- 최종 위치를 "MM:SS" 형식으로 변환하여 반환합니다.
- 시간 복잡도 분석:
- 입력 시간 변환: O(1)
- 사용자 조작 처리: O(n), 여기서 n은 `c`의 크기
- 최종 반환 문자열 변환: O(1)
- 총 시간 복잡도: O(n)
결과
코드는 동영상 길이, 현재 위치, 조작 구간 및 사용자 입력 리스트를 기반으로 정확히 최종 위치를 계산합니다. 단순하고 효율적인 로직으로 구현되었습니다.
다른 접근 방식으로, 모든 조작을 시뮬레이션하지 않고 조작 리스트를 분석하여 최종 위치를 계산하는 방법이 있습니다. 이는 큰 입력 크기에 대해 성능을 개선할 수 있습니다.
728x90
LIST
'programmers' 카테고리의 다른 글
프로그래머스 2024 KAKAO WINTER INTERNSHIP 가장 많이 받은 선물(C++) -yes6686- 티스토리 (0) | 2024.12.17 |
---|---|
프로그래머스 [PCCE 기출문제] 9번 / 지폐 접기(C++) -yes6686- 티스토리 (0) | 2024.12.16 |
프로그래머스 [PCCE 기출문제] 10번 / 공원(C++) -yes6686- 티스토리 (0) | 2024.12.16 |