| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- stack frame
- 코드엔진
- 함수 호출 규약
- x32
- 실행파일
- rev
- __fastcall
- RVA
- __vectorcall
- Programmers
- crackme
- __cdecl
- Image dos header
- 파이썬
- image section header
- Dos Stub
- Python
- pe format
- 32bit
- Reversing
- Calling Convention
- x64
- 크랙미
- ABI
- Rich Header
- 리버싱
- 리치헤더
- CodeEngn
- __stdcall
- 프로그래머스
- Today
- Total
kj0on
[Programmers] PCCE 기출문제 (16 문제) 본문

1. [PCCE 기출문제] 1번 / 문자 출력
https://school.programmers.co.kr/learn/courses/30/lessons/340207
1-1. 문제 설명
주어진 코드는 변수에 데이터를 저장하고 출력하는 코드입니다. 아래와 같이 출력되도록 빈칸을 채워 코드를 완성해 주세요.
1-2. 출력 예시
3
2
1
Let's go!
1-3. 풀이 코드
message = "Let's go!"
print("3\n2\n1")
print(message)
2. [PCCE 기출문제] 2번 / 각도 합치기
https://school.programmers.co.kr/learn/courses/30/lessons/340206
2-1. 문제 설명
일반적으로 두 선분이 이루는 각도는 한 바퀴를 360도로 하여 표현합니다. 따라서 각도에 360의 배수를 더하거나 빼더라도 같은 각을 의미합니다. 예를 들면, 30도와 390도는 같은 각도입니다.
주어진 코드는 각도를 나타내는 두 정수 angle1과 angle2가 주어질 때, 이 두 각의 합을 0도 이상 360도 미만으로 출력하는 코드입니다. 코드가 올바르게 작동하도록 한 줄을 수정해 주세요.
2-2. 제한사항
0 ≤ angle1 ≤ 5000
0 ≤ angle2 ≤ 5000
2-3. 입출력 예
입력 #1
280
485
출력 #1
45
angle1과 angle2의 합은 765도이고, 765를 720을 빼면 45도이므로 45를 출력합니다.
2-4. 풀이 코드
angle1 = int(input())
angle2 = int(input())
sum_angle = (angle1 + angle2) % 360
print(sum_angle)
3. [PCCE 기출문제] 3번 / 수 나누기
https://school.programmers.co.kr/learn/courses/30/lessons/340205
3-1. 문제 설명
2자리 이상의 정수 number가 주어집니다. 주어진 코드는 이 수를 2자리씩 자른 뒤, 자른 수를 모두 더해서 그 합을 출력하는 코드입니다. 코드가 올바르게 작동하도록 한 줄을 수정해 주세요.
3-2. 제한사항
10 ≤ number ≤ 2,000,000,000
number의 자릿수는 2의 배수입니다.
3-3. 입출력 예
입력 #1
4859
출력 #1
107
입출력 예 #1
입력된 수를 2자리씩 나눠 합치면 다음과 같습니다.
48 + 59 = 107
입력 #2
29
출력 #2
29
입출력 예 #2
입력된 수를 2자리씩 나눠 합치면 다음과 같습니다.
29 = 29
3-4. 풀이 코드
number = int(input())
answer = 0
for i in range(len(str(number)) // 2):
answer += number % 100
number //= 100
print(answer)
4. [PCCE 기출문제] 4번 / 병과분류
https://school.programmers.co.kr/learn/courses/30/lessons/340204
4-1. 문제 설명
퓨쳐종합병원에서는 접수한 환자가 진료받을 병과에 따라 자동으로 환자 코드를 부여해 주는 프로그램이 있습니다. 환자 코드의 마지막 네 글자를 보면 환자가 어디 병과에서 진료를 받아야 할지 알 수 있습니다. 예를 들어 환자의 코드가 "_eye"로 끝난다면 안과를, "head"로 끝난다면 신경외과 진료를 보게 됩니다. 환자 코드의 마지막 글자에 따른 병과 분류 기준은 다음과 같습니다.
환자의 코드를 나타내는 문자열 code를 입력받아 위 표에 맞는 병과를 출력하도록 빈칸을 채워 코드를 완성해 주세요. 위 표의 단어로 끝나지 않는다면 "direct recommendation"를 출력합니다.
마지막 글자 병과 "_eye" "Ophthalmologyc" "head" "Neurosurgery" "infl" "Orthopedics" "skin" "Dermatology"
4-2. 제한사항
4 ≤ code의 길이 ≤ 20
code는 영어 소문자와 숫자, 언더바("_")로 이루어져 있습니다.
4-3. 입출력 예
입력 #1
dry_eye
출력 #1
Ophthalmologyc
입출력 예 #1
code가 "_eye"로 끝나기 때문에 "Ophthalmologyc"를 출력합니다.
입력 #2
pat23_08_20_head
출력 #2
Neurosurgery
입출력 예 #2
code가 "head"로 끝나기 때문에 "Neurosurgery"를 출력합니다.
4-4. 풀이 코드
code = input()
last_four_words = code[-4:]
if last_four_words == "_eye":
print("Ophthalmologyc")
elif last_four_words == "head":
print("Neurosurgery")
elif last_four_words == "infl":
print("Orthopedics")
elif last_four_words == "skin":
print("Dermatology")
else:
print("direct recommendation")
5. [PCCE 기출문제] 5번 / 심폐소생술
https://school.programmers.co.kr/learn/courses/30/lessons/340203
5-1. 문제 설명
심폐소생술은 다음과 같은 순서를 통해 실시합니다.
1. 심정지 및 무호흡 확인 [check]
2. 도움 및 119 신고 요청 [call]
3. 가슴압박 30회 시행 [pressure]
4. 인공호흡 2회 시행 [respiration]
5. 가슴압박, 인공호흡 반복 [repeat]
주어진 solution 함수는 심폐소생술을 하는 방법의 순서가 담긴 문자열들이 무작위 순서로 담긴 리스트 cpr이 주어질 때 각각의 방법이 몇 번째 단계인지 순서대로 담아 return하는 함수입니다. solution 함수가 올바르게 작동하도록 빈칸을 채워 solution 함수를 완성해 주세요.
5-2. 제한사항
cpr은 다음 문자열들이 한 번씩 포함되어 있습니다.
"check", "call", "pressure", "respiration", "repeat"
5-3. 입출력 예
cpr result ["call", "respiration", "repeat", "check", "pressure"] [2, 4, 5, 1, 3] ["respiration", "repeat", "check", "pressure", "call"] [4, 5, 1, 3, 2]
입출력 예 #1
"call", "respiration", "repeat", "check", "pressure"은 각각 2, 4, 5, 1, 3 번째 순서이므로 [2, 4, 5, 1, 3]을 리턴합니다.
입출력 예 #2
"respiration", "repeat", "check", "pressure", "call"은 각각 4, 5, 1, 3, 2 번째 순서이므로 [4, 5, 1, 3, 2]를 리턴합니다.
5-4. 풀이 코드
def solution(cpr):
answer = []
basic_order = ["check", "call", "pressure", "respiration", "repeat"]
for action in cpr:
for i in range(len(basic_order)):
if action == basic_order[i]:
answer.append(i + 1)
return answer
6. [PCCE 기출문제] 6번 / 물 부족
https://school.programmers.co.kr/learn/courses/30/lessons/340202
6-1. 문제 설명
ㅇㅇ시에서는 저수지가 하나 있는데, 도시 내에서 사용하는 모든 물은 이 저수지에 저장된 물을 끌어와 사용합니다. 이상 기후로 인해 극심한 가뭄이 예고된 상황에서, 지난 달의 물 사용량과 이번달부터 일정 기간 동안의 월별 물 사용량의 변화를 예측한 값을 이용해 몇 달 뒤 물이 부족해지는지 예측하려고 합니다.
이번달부터의 월별 물 사용량 변화를 예측한 값은 다음과 같이 리스트에 담겨 주어집니다.
[10, -10, 10, -10, 10, -10, 10, -10, 10, -10]
리스트의 각 원소는 해당 월의 물 사용량이 전 달에 비해 몇 % 만큼 증가 또는 감소하는지를 나타냅니다.
예를 들어, 이번달의 물 사용량 (리스트의 첫 번째 원소)은 지난 달 보다 10% 증가한 값이며, 다음 달(리스트의 두 번째 원소)의 물 사용량은 이번달 사용량에서 10%만큼 감소한 값입니다.
자세한 값은 입출력 예시를 참고해 주세요.
현재 저수지에 저장된 물의 양을 나타내는 정수 storage와 지난 달 물 사용량을 나타내는 정수 usage, 월별 물 사용량이 전 달 대비 어떻게 변하는지 저장된 정수 리스트 change가 주어질 때 몇 달 뒤 물이 부족해지는지 return 하도록 solution 함수를 작성하려 합니다. 코드가 올바르게 작동하도록 한 줄을 수정해 solution 함수를 완성해 주세요. 가뭄이 끝날때 까지 저수지의 물이 남아 있다면 -1을 return합니다.
6-2. 제한사항
1,000 ≤ storage ≤ 1,000,000
500 ≤ usage ≤ 30,000
1 ≤ change의 길이 ≤ 30
-99 ≤ change[i] ≤ 500
change[i] 가 양수일 경우 물 사용량은 전 달 보다 change[i]% 만큼 증가합니다.
change[i] 가 음수일 경우 물 사용량은 전 달 보다 change[i]% 만큼 감소합니다.
change[i] 가 0일 경우 물 사용량은 전 달과 동일합니다.
매달 물 사용량은 소수점 이하를 버린 정수로 계산합니다.
6-3. 입출력 예
storage usage change result 5141 500 [10, -10, 10, -10, 10, -10, 10, -10, 10, -10] -1 1000 2000 [-10, 25, -33] 1
입출력 예 #1
매월 물 사용량은 다음과 같습니다.
예를 들어, 지난 달 물 사용량 usage = 500이므로, 이번달 물 사용량은 10% 증가한 550입니다. 다음 달 물 사용량은 이번달 사용량 550에서 10% 감소한 495 이며, 나머지 달도 동일하게 계산합니다. 9달 뒤까지 계산한 물 사용량은 총 5115 이며, 현재 저수지에 저장된 물의 양은 storage = 5141입니다. 따라서 물이 부족해지지 않으므로 -1을 return합니다.
n개월 뒤 0 (이번 달) 1 (다음 달) 2 3 4 5 6 7 8 9 월 별 물 사용량 550 495 544 490 539 485 533 479 526 474 총 물 사용량 550 1045 1589 2079 2618 3103 3636 4115 4641 5115
입출력 예 #2
총 사용가능한 물의 양이 1000인데 2000 * 0.9 = 1800이 필요하므로 이번 달부터 물이 부족합니다. 따라서 0을 return합니다.
6-4. 풀이 코드
def solution(storage, usage, change):
total_usage = 0
for i in range(len(change)):
usage += usage * change[i]/100
total_usage += usage
if total_usage > storage:
return i
return -1
7. [PCCE 기출문제] 7번 / 버스
https://school.programmers.co.kr/learn/courses/30/lessons/340201
7-1. 문제 설명
영진이는 약속장소에 가기 위해 버스를 타려고 합니다. 버스에는 좌석이 총 seat개만큼 있습니다. 영진이는 버스 좌석에 앉아서 갈 수 있을지 궁금해합니다. 기점에서 출발한 버스가 영진이가 기다리는 정거장에 도착하기 전에 방문하는 각 정거장에서 승/하차한 승객 정보가 주어질 때, 영진이가 버스에 탄 순간 빈 좌석은 몇 개인지 구해주세요. 영진이가 기다리는 정거장에서는 영진이가 제일 먼저 버스에 탑승하며, 이전 정거장에서 버스에 탑승한 승객들은 남는 좌석이 있다면 항상 앉는다고 가정합니다. 또, 기점에서 출발하는 버스에는 승객이 0명 타고 있습니다.
예를 들어 다음은 좌석이 5개인 버스에 각 정거장에서 승/하차한 승객 정보를 나타냅니다. 영진이는 4번 정거장에서 기다리고 있으며, "On"은 승차한 승객, "Off"는 하차한 승객을 의미합니다.
- 1번 정거장 : ["On", "On", "On"] (3명 승차, 0명 하차)
- 2번 정거장 : ["Off", "On", "-"] (1명 승차, 1명 하차)
- 3번 정거장 : ["Off", "-", "-"] (0명 승차, 1명 하차)
위와 같은 경우, 1번 정거장에서 3명이 승차하고, 2번 정거장에서 1명 승차 1명 하차, 3번 정거장에서 1명이 하차했으므로 4번 정거장에 도착한 버스에는 2명이 타고 있습니다. 4번 정거장에서는 영진이가 가장 먼저 탑승하므로, 남아있는 좌석 수는 3개입니다.
주어진 solution함수는 버스의 좌석 개수 seat, 기점에서 출발한 버스가 순서대로 방문한 정거장에서 승객이 승/하차한 정보를 담은 2차원 문자열 리스트 passengers가 주어질 때, 버스에 남아있는 좌석의 개수를 return 하는 함수입니다. solution 함수가 올바르게 작동하도록 빈칸을 채워 solution함수를 완성해 주세요.
7-2. 제한사항
1 ≤ seat ≤ 30
1 ≤ passengers의 길이 ≤ 10
1 ≤ passengers[i]의 길이 ≤ 20
passengers[0]은 1번 정거장,
passengers[1]은 2번 정거장, …
passengers[i]는 i + 1번 정거장의 정보입니다.
passengers의 길이가 n이라면, 영진이는 n + 1번 정거장에서 기다리고 있습니다.
passengers[i]의 길이는 모두 동일합니다.
passengers[i]의 원소는 "On", "Off" 또는 "-"입니다.
"-"는 배열의 가로(열) 길이를 맞추기 위한 요소로, 아무런 의미도 없습니다.
"-"가 "On", "Off" 사이에 있는 경우는 없습니다.
7-3. 입출력 예
입출력 예 #1
seat passengers result 5 [["On", "On", "On"], ["Off", "On", "-"], ["Off", "-", "-"]] 3 10 [["On", "On", "On", "On", "On", "On", "On", "On", "-", "-"], ["On", "On", "Off", "Off", "Off", "On", "On", "-", "-", "-"], ["On", "On", "On", "Off", "On", "On", "On", "Off", "Off", "Off"], ["On", "On", "Off", "-", "-", "-", "-", "-", "-", "-"]] 0
지문과 동일합니다
입출력 예 #2
아래와 같이 승객이 타고 내렸고 마지막으로 12명이 버스에 타고 있으므로 남은 좌석은 0개입니다.
- 1번 정거장 : ["On", "On", "On", "On", "On", "On", "On", "On", "-", "-"] (8명 승차, 0명 하차)
- 2번 정거장 : ["On", "On", "Off", "Off", "Off", "On", "On", "-", "-", "-"] (4명 승차, 3명 하차)
- 3번 정거장 : ["On", "On", "On", "Off", "On", "On", "On", "Off", "Off", "Off"] (6명 승차, 4명 하차)
- 4번 정거장 : ["On", "On", "Off", "-", "-", "-", "-", "-", "-", "-"] (2명 승차, 1명 하차)
7-4. 풀이 코드
def func1(num):
if 0 > num:
return 0
else:
return num
def func2(num):
if num > 0:
return 0
else:
return num
def func3(station):
num = 0
for people in station:
if people == "Off":
num += 1
return num
def func4(station):
num = 0
for people in station:
if people == "On":
num += 1
return num
def solution(seat, passengers):
num_passenger = 0
for station in passengers:
num_passenger += func4(station)
num_passenger -= func3(station)
answer = func1(seat - num_passenger)
return answer
8. [PCCE 기출문제] 8번 / 닉네임 규칙
https://school.programmers.co.kr/learn/courses/30/lessons/340200
8-1. 문제 설명
온라인 서비스를 이용하기 위해서 닉네임이 필요합니다. 이때 닉네임이 될 수 있는 조건은 다음과 같습니다.
닉네임의 길이가 4자 이상 8자 이하여야합니다.
닉네임에는 소문자 l과w, 대문자 O와 W를 사용할 수 없습니다.
이외의 영어 대소문자와 숫자는 모두 사용이 가능합니다.
주어진 solution 함수는 사용할 수 없는 닉네임 nickname을 받아 사용할 수 있는 닉네임으로 바꿔주는 함수입니다. 이때 닉네임을 변경하는 규칙은 다음과 같으며 첫 번째 규칙부터 순서대로 적용합니다.
1. 소문자 l을 대문자 I로 변경합니다.
2. 소문자 w를 두 개의 소문자 v, 즉 vv로 변경합니다.
3. 대문자 W를 두 개의 대문자 V, 즉 VV로 변경합니다.
4. 대문자 O를 숫자 0으로 변경합니다.
5. 수정된 닉네임의 길이가 4 미만일 경우 뒤에 소문자 o를 길이가 4가 될때까지 이어붙입니다.
6. 수정된 닉네임의 길이가 8보다 클 경우 8번째 문자까지만 사용합니다.
주어진 solution 함수에는 위의 규칙 중 올바르게 적용되지 않는 것이 있습니다. solution 함수가 올바르게 작동하도록 한 줄을 수정해주세요.
8-2. 제한사항
1 ≤ nickname의 길이 ≤ 10
nickname은 영어 대소문자와 숫자로만 이루어져있습니다.
8-3. 입출력 예
입출력 예 #1
nickname result "WORLDworld" "VV0RLDvv" ""GO "G0oo"
닉네임 "WORLDworld"는 1, 2, 3, 4, 6 단계를 거쳐 "VV0RLDvv"가 됩니다.
"WORLDworld" -> "WORLDworId" -> "WORLDvvorId" -> "VVORLDvvorId" -> "VV0RLDvvorId" -> "VV0RLDvv"
입출력 예 #2
닉네임 "GO"는 4, 5 단계를 거쳐 "G0oo"가 됩니다.
"GO" -> "G0" -> "G0oo"
8-4. 풀이 코드
def solution(nickname):
answer = ""
for letter in nickname:
if letter == "l":
answer += "I"
elif letter == "w":
answer += "vv"
elif letter == "W":
answer += "VV"
elif letter == "O":
answer += "0"
else:
answer += letter
if len(answer) < 3:
answer += "o" * (4 - len(answer))
if len(answer) > 8:
answer = answer[:8]
return answer
9. [PCCE 기출문제] 1번 / 출력
https://school.programmers.co.kr/learn/courses/30/lessons/250133
9-1. 문제 설명
주어진 초기 코드는 변수에 데이터를 저장하고 출력하는 코드입니다. 아래와 같이 출력되도록 빈칸을 채워 코드를 완성해 주세요.
9-2. 출력 예시
Spring is beginning
13
310
9-3. 풀이 코드
string_msg = "Spring is beginning"
int_val = 3
string_val = "3"
print(string_msg)
print(int_val + 10)
print(string_val + "10")
10. [PCCE 기출문제] 2번 / 피타고라스의 정리
10-1. 문제 설명

직각삼각형이 주어졌을 때 빗변의 제곱은 다른 두 변을 각각 제곱한 것의 합과 같습니다.
직각삼각형의 한 변의 길이를 나타내는 정수 a와 빗변의 길이를 나타내는 정수 c가 주어질 때, 다른 한 변의 길이의 제곱, b_square 을 출력하도록 한 줄을 수정해 코드를 완성해 주세요.
10-2. 제한사항
1 ≤ a < c ≤ 100
10-3. 입출력 예
입력 #1
3
5
출력 #1
16
입출력 예 #1
a2 = 9, c2 = 25 이므로 16을 출력합니다.
입력 #2
9
10
출력 #2
19
입출력 예 #2
a2 = 81, c2 = 100 이므로 19를 출력합니다.
10-4. 풀이 코드
a = int(input())
c = int(input())
b_square = c ** 2 - a ** 2
print(b_square)
11. [PCCE 기출문제] 3번 / 나이 계산
https://school.programmers.co.kr/learn/courses/30/lessons/250131
11-1. 문제 설명
나이를 세는 방법은 여러 가지가 있습니다. 그중 한국식 나이는 태어난 순간 1살이 되며 해가 바뀔 때마다 1살씩 더 먹게 됩니다. 연 나이는 태어난 순간 0살이며 해가 바뀔 때마다 1살씩 더 먹게 됩니다. 각각 나이의 계산법은 다음과 같습니다.
한국식 나이 : 현재 연도 - 출생 연도 + 1
연 나이 : 현재 연도 - 출생 연도
출생 연도를 나타내는 정수 year와 구하려는 나이의 종류를 나타내는 문자열 age_type이 주어질 때 2030년에 몇 살인지 출력하도록 빈칸을 채워 코드를 완성해 주세요. age_type이 "Korea"라면 한국식 나이를, "Year"라면 연 나이를 출력합니다.
11-2. 제한사항
1950 ≤ year ≤ 2030age_type은 "Korea" 또는 "Year"만 주어집니다.
11-3. 입출력 예
입력 #1
2000
Korea
출력 #1
31
입출력 예 #1
2030년에 2000년생의 한국식 나이는 2030 - 2000 + 1 = 31살입니다.
입력 #2
1999
Year
출력 #2
31
입출력 예 #2
2030년에 1999년생의 연 나이는 2030 - 1999 = 31살입니다.
11-4. 풀이 코드
year = int(input())
age_type = input()
if age_type == "Korea":
answer = 2030 - year + 1
elif age_type == "Year":
answer = 2030 - year
print(answer)
12. [PCCE 기출문제] 4번 / 저축
https://school.programmers.co.kr/learn/courses/30/lessons/250130
12-1. 문제 설명
진우는 돈을 모으기 위해 저축을 하려고 합니다. 목표로 하는 금액은 100만 원이며, 첫 달에 일정 금액을 넣은 뒤 70만 원까지는 매월 조금씩 저축하다가 70만 원 이후부터는 월 저축량을 늘려 빠르게 목표 금액을 달성하고자 합니다.
첫 달에 저축하는 금액을 나타내는 정수 start, 두 번째 달 부터 70만 원 이상 모일 때까지 매월 저축하는 금액을 나타내는 정수 before, 100만 원 이상 모일 때 까지 매월 저축하는 금액을 나타내는 정수 after가 주어질 때, 100만 원 이상을 모을 때까지 걸리는 개월 수를 출력하도록 빈칸을 채워 코드를 완성해 주세요.
12-2. 제한사항
0 ≤ start ≤ 991 ≤ before ≤ after ≤ 25
12-3. 입출력 예
입력 #1
28
6
8
출력 #1
12
입출력 예 #1
매월 저축된 금액은 아래 표와 같습니다. 따라서 12를 출력합니다.
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 28 | 34 | 40 | 46 | 52 | 58 | 64 | 70 | 78 | 86 | 94 | 102 |
입력 #2
75
8
25
출력 #2
2
입출력 예 #2
첫 달 저축된 금액이 70이 넘으므로 두 번째 달부터 바로 after= 25 만큼 저축합니다. 따라서 2를 출력합니다.
| 1 | 2 |
| 75 | 100 |
12-4. 풀이 코드
start = int(input())
before = int(input())
after = int(input())
money = start
month = 1
while money < 70:
money += before
month += 1
while money< 100:
money += after
month += 1
print(month)
13. [PCCE 기출문제] 5번 / 산책
https://school.programmers.co.kr/learn/courses/30/lessons/250129
13-1. 문제 설명
여름이는 강아지를 산책시키려고 합니다. 여름이는 2차원 좌표평면에서 동/서/남/북 방향으로 1m 단위로 이동하면서 강아지를 산책시킵니다. 산책루트가 담긴 문자열 route가 주어질 때, 도착점의 위치를 return하도록 빈칸을 채워 solution함수를 완성해 주세요.
route는 "N", "S", "E", "W"로 이루어져 있습니다.
"N"은 북쪽으로 1만큼 움직입니다.
"S"는 남쪽으로 1만큼 움직입니다.
북쪽으로 -1만큼 움직인 것과 같습니다.
"E"는 동쪽으로 1만큼 움직입니다.
"W"는 서쪽으로 1만큼 움직입니다.
동쪽으로 -1만큼 움직인 것과 같습니다.
출발점으로부터 [동쪽으로 떨어진 거리, 북쪽으로 떨어진 거리]형태로 강아지의 최종 위치를 구해서 return해야 합니다.
출발점을 기준으로 서쪽, 남쪽에 있는 경우는 동쪽, 북쪽으로 음수만큼 떨어진 것으로 표현합니다.
출발점으로부터 동쪽으로 2, 북쪽으로 3만큼 떨어졌다면 [2, 3]을 return 합니다.
출발점으로부터 서쪽으로 1, 남쪽으로 4만큼 떨어졌다면 [-1, -4]를 return 합니다.
13-2. 제한사항
1 ≤ route의 길이 ≤ 20
route는 "N", "S", "E", "W"로만 이루어져 있습니다.
13-3. 입출력 예
입출력 예 #1
route result "NSSNEWWN" [-1, 1] "EESEEWNWSNWWNS" [0, 0]
"NSSNEWWN" 순서대로 움직이면 서쪽으로 1, 북쪽으로 1만큼 떨어진 곳에 도착하게 되므로 [-1, 1]을 return합니다.
입출력 예 #2
"EESEEWNWSNWWNS" 순서대로 움직이면 출발지와 같은 곳으로 돌아오므로 [0, 0]을 return합니다.
13-4. 풀이 코드
def solution(route):
east = 0
north = 0
for i in route:
if i == "N":
north += 1
elif i == "S" :
north -= 1
elif i == "E" :
east += 1
elif i == "W":
east -= 1
return [east, north]
14. [PCCE 기출문제] 6번 / 가채점
https://school.programmers.co.kr/learn/courses/30/lessons/250128
14-1. 문제 설명
A반 학생들은 시험이 끝난 뒤 성적이 나오기 전 자기 시험지를 가채점해 보았습니다. 이후에 선생님이 실제 성적을 불러 줄 때 가채점한 점수와 실제 성적이 다른 학생들이 있어 선생님께 문의를 하려고 합니다.
성적을 문의하려는 학생들의 번호가 담긴 정수 리스트 numbers와 가채점한 점수가 성적을 문의하려는 학생 순서대로 담긴 정수 리스트 our_score, 실제 성적이 번호 순서대로 담긴 정수 리스트 score_list가 주어집니다. 주어진 solution 함수는 가채점한 점수가 실제 성적과 동일하다면 "Same"을, 다르다면 "Different"를 순서대로 리스트에 담아 return하는 함수입니다. solution 함수가 올바르게 작동하도록 한 줄을 수정해 주세요.
14-2. 제한사항
1 ≤ numbers의 길이 = our_score의 길이 ≤ 10
1 ≤ numbers의 원소 ≤ 31
0 ≤ our_score의 원소 ≤ 100
our_score[i]는 numbers[i]번 학생이 가채점한 점수입니다.
numbers는 중복된 원소를 가지지 않습니다.
2 ≤ score_list의 길이 ≤ 31
0 ≤ score_list의 원소 ≤ 100
score_list에는 실제 성적이 [1번 학생 성적, 2번 학생 성적, 3번 학생 성적 …] 순서로 들어있습니다.
14-3. 입출력 예
입출력 예 #1
numbers our_score score_list result [1] [100] [100, 80, 90, 84, 20] ["Same"] [3, 4] [85, 93] [85, 92, 38, 93, 48, 85, 92, 56] ["Different", "Same"]
1번 학생이 가채점한 성적은 100점으로 실제 성적과 같기 때문에 "Same"을 담아 return합니다.
입출력 예 #2
3번 학생이 가채점한 성적은 85점으로 실제 성적 38점과 다르기 때문에 "Different"를, 4번 학생이 채점한 성적은 93점으로 실제 성적과 같기 때문에 "Same"을 담아 return합니다.
14-4. 풀이 코드
def solution(numbers, our_score, score_list):
answer = []
for i in range(len(numbers)):
if our_score[i] == score_list[numbers[i] - 1]:
answer.append("Same")
else:
answer.append("Different")
return answer
15. [PCCE 기출문제] 7번 / 가습기
https://school.programmers.co.kr/learn/courses/30/lessons/250127
15-1. 문제 설명
상우가 사용하는 가습기에는 "auto", "target", "minimum"의 세 가지 모드가 있습니다. 가습기의 가습량은 0~5단계로 구분되며 각 모드 별 동작 방식은 다음과 같습니다.
"auto" 모드
습도가 0 이상 10 미만인 경우 : 5단계
습도가 10 이상 20 미만인 경우 : 4단계
습도가 20 이상 30 미만인 경우 : 3단계
습도가 30 이상 40 미만인 경우 : 2단계
습도가 40 이상 50 미만인 경우 : 1단계
습도가 50 이상인 경우 : 0단계
"target" 모드
습도가 설정값 미만일 경우 : 3단계
습도가 설정값 이상일 경우 : 1단계
"minimum"모드
습도가 설정값 미만일 경우 : 1단계
습도가 설정값 이상일 경우 : 0단계
상우가 설정한 가습기의 모드를 나타낸 문자열 mode_type, 현재 공기 중 습도를 나타낸 정수 humidity, 설정값을 나타낸 정수 val_set이 주어질 때 현재 가습기가 몇 단계로 작동 중인지 return하도록 빈칸을 채워 solution 함수를 완성해 주세요.
15-2. 제한사항
mode_type은 "auto", "target", "minimum" 세 가지 중 하나의 값을 갖습니다.
0 ≤ humidity, val_set ≤ 100
15-3. 입출력 예
입출력 예 #1
mode_type hymidity val_set result "auto" 23 45 3 "target" 41 40 1 "minimum" 10 34 1
"auto"모드이므로 습도에 따라 가습량이 조절됩니다. 현재 습도가 20 이상 30 미만이므로 3을 return합니다.
입출력 예 #2
"target"모드이고, 설정값보다 습도가 높으므로 1을 return합니다.
입출력 예 #3
"minimum"모드이고, 설정값보다 습도가 낮으므로 1을 return합니다.
15-4. 풀이 코드
def func1(humidity, val_set):
if humidity < val_set:
return 3
return 1
def func2(humidity):
if humidity >= 50:
return 0
elif humidity >= 40:
return 1
elif humidity >= 30:
return 2
elif humidity >= 20:
return 3
elif humidity >= 10:
return 4
elif 0 <= humidity < 10:
return 5
def func3(humidity, val_set):
if humidity < val_set:
return 1
return 0
def solution(mode_type, humidity, val_set):
answer = 0
if mode_type == "auto":
answer = func2(humidity)
elif mode_type == "target":
answer = func1(humidity, val_set)
elif mode_type == "minimum":
answer = func3(humidity, val_set)
return answer
16. [PCCE 기출문제] 8번 / 창고 정리
16-1. 문제 설명

선빈이는 게임을 즐기던 중 가지고 있는 물건이 너무 많아 창고 정리를 하기로 했습니다. 선빈이가 보유한 게임 속 창고는 여러 칸으로 나누어져 있고 각 칸에는 물건들이 담겨있습니다. 창고를 정리할 방법을 고민하던 선빈이는 같은 물건이 여러 칸에 나누어 들어있는 것을 발견하고 우선 같은 물건끼리 최대한 겹쳐쌓는 방식으로 창고를 정리하기로 했습니다. 선빈이의 창고에 들어있는 물건의 이름과 개수는 리스트 형태로 주어지며, 한 칸에 겹쳐질 수 있는 물건의 개수에는 제한이 없다고 가정합니다.
예를 들어 창고의 각 칸에 담겨있는 물건의 이름이storage = ["pencil", "pencil", "pencil", "book"], 각 물건의 개수가 num = [2, 4, 3, 1]이라면 연필과 책을 한 칸에 각각 겹쳐 쌓아 간단하게 clean_storage = ["pencil", "book"], clean_num = [9, 1]로 만들 수 있습니다.
주어진 solution 함수는 정리되기 전 창고의 물건 이름이 담긴 문자열 리스트 storage와 각 물건의 개수가 담긴 정수 리스트 num이 주어질 때, 정리된 창고에서 개수가 가장 많은 물건의 이름을 return 하는 함수입니다. solution 함수가 올바르게 작동하도록 한 줄을 수정해 주세요.
16-2. 제한사항
1 ≤ storage의 길이 = num의 길이 ≤ 30
storage[i]는 영어 대소문자로 이루어져 있습니다.
물건은 대소문자를 구분합니다. 즉, "Book"과 "book"은 서로 다른 물건입니다.
1 ≤ storage[i]의 길이 ≤ 30
1 ≤ num[i] ≤ 20
num[i]에는 storage[i]에 해당하는 물건의 개수가 담겨있습니다.
가장 개수가 많은 물건이 두 가지 이상인 경우는 없습니다.
한 칸에는 한 종류의 물건만 들어갈 수 있습니다.
16-3. 입출력 예
입출력 예 #1
storage num result ["pencil", "pencil", "pencil", "book"] [2, 4, 3, 1] [2, 4, 3, 1] "pencil" ["doll", "doll", "doll", "doll"] [1, 1, 1, 1] [1, 1, 1, 1] "doll" ["apple", "steel", "leaf", "apple", "leaf"] [5, 3, 5, 3, 7] "leaf" ["mirror", "net", "mirror", "net", "bottle"] [4, 1, 4, 1, 5] "mirror"
본문에 설명된 대로 창고를 정리하면 clean_storage = ["pencil", "book"], clean_num = [9, 1]이 됩니다. 따라서 가장 개수가 많은 물건인 "pencil"을 return합니다.
입출력 예 #2
창고를 정리하면 clean_storage = ["doll"], clean_num = [4]가 됩니다. 따라서 가장 개수가 많은 물건인 "doll"을 return합니다.
입출력 예 #3
창고를 정리하면 clean_storage = ["apple", "steel", "leaf"], clean_num = [8, 3, 12]가 됩니다. 따라서 가장 개수가 많은 물건인 "leaf"를 return합니다.
입출력 예 #4
창고를 정리하면 clean_storage = ["mirror", "net", "bottle"], clean_num = [8, 2, 5]가 됩니다. 따라서 가장 개수가 많은 물건인 "mirror"를 return합니다.
16-4. 풀이 코드
def solution(storage, num):
clean_storage = []
clean_num = []
for i in range(len(storage)):
if storage[i] in clean_storage:
pos = clean_storage.index(storage[i])
clean_num[pos] += num[i]
else:
clean_storage.append(storage[i])
clean_num.append(num[i])
# 아래 코드에는 틀린 부분이 없습니다.
max_num = max(clean_num)
answer = clean_storage[clean_num.index(max_num)]
return answer
'Python > Coding Test' 카테고리의 다른 글
| [Programmers] 코딩 기초 트레이닝 (124 문제) (1) | 2025.07.11 |
|---|---|
| [Programmers] 코딩 테스트 입문 (100 문제) (0) | 2025.06.27 |