Skip to content

Commit fd21460

Browse files
chore: sync baekjoon archives
1 parent 3147725 commit fd21460

4 files changed

Lines changed: 386 additions & 0 deletions

File tree

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
# [level 1] 흉부외과 또는 일반외과 의사 목록 출력하기 - 132203
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/132203?language=mysql)
4+
5+
### 성능 요약
6+
7+
메모리: undefined, 시간:
8+
9+
### 구분
10+
11+
코딩테스트 연습 > SELECT
12+
13+
### 채점결과
14+
15+
합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2026년 05월 22일 10:06:49
20+
21+
### 문제 설명
22+
23+
<p>다음은 종합병원에 속한 의사 정보를 담은<code>DOCTOR</code> 테이블입니다. <code>DOCTOR</code> 테이블은 다음과 같으며 <code>DR_NAME</code>, <code>DR_ID</code>, <code>LCNS_NO</code>, <code>HIRE_YMD</code>, <code>MCDP_CD</code>, <code>TLNO</code>는 각각 의사이름, 의사ID, 면허번호, 고용일자, 진료과코드, 전화번호를 나타냅니다.</p>
24+
<table class="table">
25+
<thead><tr>
26+
<th>Column name</th>
27+
<th>Type</th>
28+
<th>Nullable</th>
29+
</tr>
30+
</thead>
31+
<tbody><tr>
32+
<td>DR_NAME</td>
33+
<td>VARCHAR(20)</td>
34+
<td>FALSE</td>
35+
</tr>
36+
<tr>
37+
<td>DR_ID</td>
38+
<td>VARCHAR(10)</td>
39+
<td>FALSE</td>
40+
</tr>
41+
<tr>
42+
<td>LCNS_NO</td>
43+
<td>VARCHAR(30)</td>
44+
<td>FALSE</td>
45+
</tr>
46+
<tr>
47+
<td>HIRE_YMD</td>
48+
<td>DATE</td>
49+
<td>FALSE</td>
50+
</tr>
51+
<tr>
52+
<td>MCDP_CD</td>
53+
<td>VARCHAR(6)</td>
54+
<td>TRUE</td>
55+
</tr>
56+
<tr>
57+
<td>TLNO</td>
58+
<td>VARCHAR(50)</td>
59+
<td>TRUE</td>
60+
</tr>
61+
</tbody>
62+
</table>
63+
<hr>
64+
65+
<h5>문제</h5>
66+
67+
<p><code>DOCTOR</code> 테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성해주세요. 이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬해주세요.</p>
68+
69+
<hr>
70+
71+
<h5>예시</h5>
72+
73+
<p><code>DOCTOR</code> 테이블이 다음과 같을 때</p>
74+
<table class="table">
75+
<thead><tr>
76+
<th>DR_NAME</th>
77+
<th>DR_ID</th>
78+
<th>LCNS_NO</th>
79+
<th>HIRE_YMD</th>
80+
<th>MCDP_CD</th>
81+
<th>TLNO</th>
82+
</tr>
83+
</thead>
84+
<tbody><tr>
85+
<td>루피</td>
86+
<td>DR20090029</td>
87+
<td>LC00010001</td>
88+
<td>2009-03-01</td>
89+
<td>CS</td>
90+
<td>01085482011</td>
91+
</tr>
92+
<tr>
93+
<td>패티</td>
94+
<td>DR20090001</td>
95+
<td>LC00010901</td>
96+
<td>2009-07-01</td>
97+
<td>CS</td>
98+
<td>01085220122</td>
99+
</tr>
100+
<tr>
101+
<td>뽀로로</td>
102+
<td>DR20170123</td>
103+
<td>LC00091201</td>
104+
<td>2017-03-01</td>
105+
<td>GS</td>
106+
<td>01034969210</td>
107+
</tr>
108+
<tr>
109+
<td>티거</td>
110+
<td>DR20100011</td>
111+
<td>LC00011201</td>
112+
<td>2010-03-01</td>
113+
<td>NP</td>
114+
<td>01034229818</td>
115+
</tr>
116+
<tr>
117+
<td>품바</td>
118+
<td>DR20090231</td>
119+
<td>LC00011302</td>
120+
<td>2015-11-01</td>
121+
<td>OS</td>
122+
<td>01049840278</td>
123+
</tr>
124+
<tr>
125+
<td>티몬</td>
126+
<td>DR20090112</td>
127+
<td>LC00011162</td>
128+
<td>2010-03-01</td>
129+
<td>FM</td>
130+
<td>01094622190</td>
131+
</tr>
132+
<tr>
133+
<td>니모</td>
134+
<td>DR20200012</td>
135+
<td>LC00911162</td>
136+
<td>2020-03-01</td>
137+
<td>CS</td>
138+
<td>01089483921</td>
139+
</tr>
140+
<tr>
141+
<td>오로라</td>
142+
<td>DR20100031</td>
143+
<td>LC00010327</td>
144+
<td>2010-11-01</td>
145+
<td>OS</td>
146+
<td>01098428957</td>
147+
</tr>
148+
<tr>
149+
<td>자스민</td>
150+
<td>DR20100032</td>
151+
<td>LC00010192</td>
152+
<td>2010-03-01</td>
153+
<td>GS</td>
154+
<td>01023981922</td>
155+
</tr>
156+
<tr>
157+
<td>벨</td>
158+
<td>DR20100039</td>
159+
<td>LC00010562</td>
160+
<td>2010-07-01</td>
161+
<td>GS</td>
162+
<td>01058390758</td>
163+
</tr>
164+
</tbody>
165+
</table>
166+
<p>SQL을 실행하면 다음과 같이 출력되어야 합니다.</p>
167+
<table class="table">
168+
<thead><tr>
169+
<th>DR_NAME</th>
170+
<th>DR_ID</th>
171+
<th>MCDP_CD</th>
172+
<th>HIRE_YMD</th>
173+
</tr>
174+
</thead>
175+
<tbody><tr>
176+
<td>니모</td>
177+
<td>DR20200012</td>
178+
<td>CS</td>
179+
<td>2020-03-01</td>
180+
</tr>
181+
<tr>
182+
<td>뽀로로</td>
183+
<td>DR20170123</td>
184+
<td>GS</td>
185+
<td>2017-03-01</td>
186+
</tr>
187+
<tr>
188+
<td>벨</td>
189+
<td>DR20100039</td>
190+
<td>GS</td>
191+
<td>2010-07-01</td>
192+
</tr>
193+
<tr>
194+
<td>자스민</td>
195+
<td>DR20100032</td>
196+
<td>GS</td>
197+
<td>2010-03-01</td>
198+
</tr>
199+
<tr>
200+
<td>패티</td>
201+
<td>DR20090001</td>
202+
<td>CS</td>
203+
<td>2009-07-01</td>
204+
</tr>
205+
<tr>
206+
<td>루피</td>
207+
<td>DR20090029</td>
208+
<td>CS</td>
209+
<td>2009-03-01</td>
210+
</tr>
211+
</tbody>
212+
</table>
213+
<hr>
214+
215+
<h5>주의사항</h5>
216+
217+
<p>날짜 포맷은 예시와 동일하게 나와야합니다.</p>
218+
219+
220+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-- 코드를 입력하세요
2+
SELECT DR_NAME, DR_ID, MCDP_CD, HIRE_YMD
3+
from doctor
4+
where MCDP_CD='cs' or MCDP_CD='gs'
5+
order by hire_ymd desc, dr_name asc;
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
# [level 1] [PCCP 기출문제] 1번 / 동영상 재생기 - 340213
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/340213)
4+
5+
### 성능 요약
6+
7+
메모리: 63.3 MB, 시간: 0.88 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > PCCP 기출문제
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2026년 05월 22일 09:50:55
20+
21+
### 문제 설명
22+
23+
<p>당신은 동영상 재생기를 만들고 있습니다. 당신의 동영상 재생기는 10초 전으로 이동, 10초 후로 이동, 오프닝 건너뛰기 3가지 기능을 지원합니다. 각 기능이 수행하는 작업은 다음과 같습니다.</p>
24+
25+
<ul>
26+
<li>10초 전으로 이동: 사용자가 "prev" 명령을 입력할 경우 동영상의 재생 위치를 현재 위치에서 10초 전으로 이동합니다. 현재 위치가 10초 미만인 경우 영상의 처음 위치로 이동합니다. 영상의 처음 위치는 0분 0초입니다.</li>
27+
<li>10초 후로 이동: 사용자가 "next" 명령을 입력할 경우 동영상의 재생 위치를 현재 위치에서 10초 후로 이동합니다. 동영상의 남은 시간이 10초 미만일 경우 영상의 마지막 위치로 이동합니다. 영상의 마지막 위치는 동영상의 길이와 같습니다.</li>
28+
<li>오프닝 건너뛰기: 현재 재생 위치가 오프닝 구간(<code>op_start</code> ≤ 현재 재생 위치 ≤ <code>op_end</code>)인 경우 자동으로 오프닝이 끝나는 위치로 이동합니다.</li>
29+
</ul>
30+
31+
<p>동영상의 길이를 나타내는 문자열 <code>video_len</code>, 기능이 수행되기 직전의 재생위치를 나타내는 문자열 <code>pos</code>, 오프닝 시작 시각을 나타내는 문자열 <code>op_start</code>, 오프닝이 끝나는 시각을 나타내는 문자열 <code>op_end</code>, 사용자의 입력을 나타내는 1차원 문자열 배열 <code>commands</code>가 매개변수로 주어집니다. 이때 사용자의 입력이 모두 끝난 후 동영상의 위치를 "<code>mm</code>:<code>ss</code>" 형식으로 return 하도록 solution 함수를 완성해 주세요.</p>
32+
33+
<hr>
34+
35+
<h5>제한사항</h5>
36+
37+
<ul>
38+
<li><code>video_len</code>의 길이 = <code>pos</code>의 길이 = <code>op_start</code>의 길이 = <code>op_end</code>의 길이 = 5
39+
40+
<ul>
41+
<li><code>video_len</code>, <code>pos</code>, <code>op_start</code>, <code>op_end</code>는 "<code>mm</code>:<code>ss</code>" 형식으로 <code>mm</code>분 <code>ss</code>초를 나타냅니다.</li>
42+
<li>0 ≤ <code>mm</code> ≤ 59</li>
43+
<li>0 ≤ <code>ss</code> ≤ 59</li>
44+
<li>분, 초가 한 자리일 경우 0을 붙여 두 자리로 나타냅니다.</li>
45+
<li>비디오의 현재 위치 혹은 오프닝이 끝나는 시각이 동영상의 범위 밖인 경우는 주어지지 않습니다.</li>
46+
<li>오프닝이 시작하는 시각은 항상 오프닝이 끝나는 시각보다 전입니다.</li>
47+
</ul></li>
48+
<li>1 ≤ <code>commands</code>의 길이 ≤ 100
49+
50+
<ul>
51+
<li><code>commands</code>의 원소는 "prev" 혹은 "next"입니다.</li>
52+
<li>"prev"는 10초 전으로 이동하는 명령입니다.</li>
53+
<li>"next"는 10초 후로 이동하는 명령입니다.</li>
54+
</ul></li>
55+
</ul>
56+
57+
<hr>
58+
59+
<h5>입출력 예</h5>
60+
<table class="table">
61+
<thead><tr>
62+
<th>video_len</th>
63+
<th>pos</th>
64+
<th>op_start</th>
65+
<th>op_end</th>
66+
<th>commands</th>
67+
<th>result</th>
68+
</tr>
69+
</thead>
70+
<tbody><tr>
71+
<td>"34:33"</td>
72+
<td>"13:00"</td>
73+
<td>"00:55"</td>
74+
<td>"02:55"</td>
75+
<td>["next", "prev"]</td>
76+
<td>"13:00"</td>
77+
</tr>
78+
<tr>
79+
<td>"10:55"</td>
80+
<td>"00:05"</td>
81+
<td>"00:15"</td>
82+
<td>"06:55"</td>
83+
<td>["prev", "next", "next"]</td>
84+
<td>"06:55"</td>
85+
</tr>
86+
<tr>
87+
<td>"07:22"</td>
88+
<td>"04:05"</td>
89+
<td>"00:15"</td>
90+
<td>"04:07"</td>
91+
<td>["next"]</td>
92+
<td>"04:17"</td>
93+
</tr>
94+
</tbody>
95+
</table>
96+
<hr>
97+
98+
<h5>입출력 예 설명</h5>
99+
100+
<p><strong>입출력 예 #1</strong></p>
101+
102+
<ul>
103+
<li>시작 위치 13분 0초에서 10초 후로 이동하면 13분 10초입니다.</li>
104+
<li>13분 10초에서 10초 전으로 이동하면 13분 0초입니다.</li>
105+
<li>따라서 "13:00"을 return 하면 됩니다.</li>
106+
</ul>
107+
108+
<p><strong>입출력 예 #2</strong></p>
109+
110+
<ul>
111+
<li>시작 위치 0분 5초에서 10초 전으로 이동합니다. 현재 위치가 10초 미만이기 때문에 0분 0초로 이동합니다.</li>
112+
<li>0분 0초에서 10초 후로 이동하면 0분 10초입니다.</li>
113+
<li>0분 10초에서 10초 후로 이동하면 0분 20초입니다. 0분 20초는 오프닝 구간이기 때문에 오프닝이 끝나는 위치인 6분 55초로 이동합니다. 따라서 "06:55"를 return 하면 됩니다.</li>
114+
</ul>
115+
116+
<p><strong>입출력 예 #3</strong></p>
117+
118+
<ul>
119+
<li>시작 위치 4분 5초는 오프닝 구간이기 때문에 오프닝이 끝나는 위치인 4분 7초로 이동합니다. 4분 7초에서 10초 후로 이동하면 4분 17초입니다. 따라서 "04:17"을 return 하면 됩니다.</li>
120+
</ul>
121+
122+
123+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import java.util.*;
2+
3+
4+
class Solution {
5+
public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
6+
int videoLenSec = toSec(video_len);
7+
int posSec = toSec(pos);
8+
int opStartSec = toSec(op_start);
9+
int opEndSec = toSec(op_end);
10+
11+
12+
for(String c:commands){
13+
if(opStartSec<=posSec && posSec<=opEndSec) posSec=opEndSec;
14+
if(c.equals("next")) {
15+
posSec+=10;
16+
if(posSec>videoLenSec) posSec=videoLenSec;
17+
}
18+
else{
19+
posSec-=10;
20+
if(posSec<0) posSec=0;
21+
}
22+
}
23+
if(opStartSec<=posSec && posSec<=opEndSec) posSec=opEndSec;
24+
25+
int mm=posSec/60;
26+
int ss=posSec%60;
27+
28+
return String.format("%02d:%02d", mm,ss);
29+
}
30+
31+
public int toSec(String time){
32+
String[] t=time.split(":");
33+
int min = Integer.parseInt(t[0]);
34+
int sec = Integer.parseInt(t[1]);
35+
36+
return 60*min+sec;
37+
}
38+
}

0 commit comments

Comments
 (0)