코딩항해기
[프로그래머스/JAVA] [PCCE 기출문제] 1번~8번 본문
코딩테스트 연습 > 코딩 기초 트레이닝 > [PCCE 기출문제] 1번 ~ 8번
[문제 1번 : 출력]
빈칸 채우기 문제 안내
빈칸 채우기는 이미 완성된 코드 중 빈칸에 알맞은 코드를 입력하는 문제 타입입니다.
빈칸을 제외한 기본 코드는 수정할 수 없습니다.
빈칸을 채우지 않을 경우, 실행 결과에 에러 메시지가 표시됩니다.
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
String msg =
;
int val1 =
;
String val2 =
;
System.out.println(msg);
System.out.println(val1 + 10);
System.out.println(val2 + "10");
}
}
[출력예시]
Spring is beginning
13
310
[답안]
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
String msg = "Spring is beginning";
int val1 = 3;
String val2 = "3";
System.out.println(msg);
System.out.println(val1 + 10);
System.out.println(val2 + "10");
}
}
[문제 2번 : 피타고라스의 정리]
직각삼각형이 주어졌을 때 빗변의 제곱은 다른 두 변을 각각 제곱한 것의 합과 같습니다.
직각삼각형의 한 변의 길이를 나타내는 정수 a와 빗변의 길이를 나타내는 정수 c가 주어질 때,
다른 한 변의 길이의 제곱, b_square 을 출력하도록 한 줄을 수정해 코드를 완성해 주세요.
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int c = sc.nextInt();
int b_square = c - a;
System.out.println(b_square);
}
}
[답안]
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int c = sc.nextInt();
int b_square = (int) (Math.pow(c,2) - Math.pow(a,2));
System.out.println(b_square);
}
}
*Math.pow(c,2) 의 리턴값은 double 타입이다.
[문제 3번 : 나이 계산]
나이를 세는 방법은 여러 가지가 있습니다. 그중 한국식 나이는 태어난 순간 1살이 되며 해가 바뀔 때마다 1살씩 더 먹게 됩니다. 연 나이는 태어난 순간 0살이며 해가 바뀔 때마다 1살씩 더 먹게 됩니다. 각각 나이의 계산법은 다음과 같습니다.
한국식 나이 : 현재 연도 - 출생 연도 + 1
연 나이 : 현재 연도 - 출생 연도
출생 연도를 나타내는 정수 year와 구하려는 나이의 종류를 나타내는 문자열 age_type이 주어질 때 2030년에 몇 살인지 출력하도록 빈칸을 채워 코드를 완성해 주세요. age_type이 "Korea"라면 한국식 나이를, "Year"라면 연 나이를 출력합니다.
[답안]
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
String age_type = sc.next();
int answer = 0;
if (age_type.equals("Korea")) {
answer = 2030-year+1;
}
else if (age_type.equals("Year")) {
answer = 2030-year;
}
System.out.println(answer);
}
}
[문제 4번 : 저축]
진우는 돈을 모으기 위해 저축을 하려고 합니다. 목표로 하는 금액은 100만 원이며, 첫 달에 일정 금액을 넣은 뒤 70만 원까지는 매월 조금씩 저축하다가 70만 원 이후부터는 월 저축량을 늘려 빠르게 목표 금액을 달성하고자 합니다.
첫 달에 저축하는 금액을 나타내는 정수 start, 두 번째 달 부터 70만 원 이상 모일 때까지 매월 저축하는 금액을 나타내는 정수 before, 100만 원 이상 모일 때 까지 매월 저축하는 금액을 나타내는 정수 after가 주어질 때, 100만 원 이상을 모을 때까지 걸리는 개월 수를 출력하도록 빈칸을 채워 코드를 완성해 주세요.
[답안]
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int start = sc.nextInt();
int before = sc.nextInt();
int after = sc.nextInt();
int money = start;
int month = 1;
while (money < 70) {
money += before;
month++;
}
while (money < 100) {
money += after;
month++;
}
System.out.println(month);
}
}
[문제 5번 : 산책]
여름이는 강아지를 산책시키려고 합니다. 여름이는 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 합니다.
[답안]
class Solution {
public int[] solution(String route) {
int east = 0;
int north = 0;
int[] answer = new int [2];
for(int i=0; i<route.length(); i++){
switch(route.charAt(i)){
case 'N':
north++;
break;
case 'S':
north--;
break;
case 'E':
east++;
break;
case 'W':
east--;
break;
}
}
answer[0] = east;
answer[1] = north;
return answer;
}
}
[문제 6번 : 가채점]
A반 학생들은 시험이 끝난 뒤 성적이 나오기 전 자기 시험지를 가채점해 보았습니다. 이후에 선생님이 실제 성적을 불러 줄 때 가채점한 점수와 실제 성적이 다른 학생들이 있어 선생님께 문의를 하려고 합니다.
성적을 문의하려는 학생들의 번호가 담긴 정수 리스트 numbers와 가채점한 점수가 성적을 문의하려는 학생 순서대로 담긴 정수 리스트 our_score, 실제 성적이 번호 순서대로 담긴 정수 리스트 score_list가 주어집니다. 주어진 solution 함수는 가채점한 점수가 실제 성적과 동일하다면 "Same"을, 다르다면 "Different"를 순서대로 리스트에 담아 return하는 함수입니다. solution 함수가 올바르게 작동하도록 한 줄을 수정해 주세요.
[답안]
class Solution {
public String[] solution(int[] numbers, int[] our_score, int[] score_list) {
int num_student = numbers.length;
String[] answer = new String[num_student];
for (int i = 0; i < num_student; i++) {
if (our_score[i] == score_list[numbers[i]-1]) {
answer[i] = "Same";
}
else {
answer[i] = "Different";
}
}
return answer;
}
}
[문제 7번 : 가습기]
상우가 사용하는 가습기에는 "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 함수를 완성해 주세요.
[답안]
class Solution {
public int func1(int humidity, int val_set){
if(humidity < val_set)
return 3;
return 1;
}
public int func2(int humidity){
if(humidity >= 50)
return 0;
else if (humidity >= 40)
return 1;
else if (humidity >= 30)
return 2;
else if (humidity >= 20)
return 3;
else if (humidity >= 10)
return 4;
else
return 5;
}
public int func3(int humidity, int val_set){
if(humidity < val_set)
return 1;
return 0;
}
public int solution(String mode_type, int humidity, int val_set) {
int answer = 0;
if(mode_type.equals("auto")){
answer = func2(humidity);
}
else if(mode_type.equals("target")){
answer = func1(humidity, val_set);
}
else if(mode_type.equals("minimum")){
answer = func3(humidity, val_set);
}
return answer;
}
}
[문제 8번 : 창고정리]
선빈이는 게임을 즐기던 중 가지고 있는 물건이 너무 많아 창고 정리를 하기로 했습니다. 선빈이가 보유한 게임 속 창고는 여러 칸으로 나누어져 있고 각 칸에는 물건들이 담겨있습니다. 창고를 정리할 방법을 고민하던 선빈이는 같은 물건이 여러 칸에 나누어 들어있는 것을 발견하고 우선 같은 물건끼리 최대한 겹쳐쌓는 방식으로 창고를 정리하기로 했습니다. 선빈이의 창고에 들어있는 물건의 이름과 개수는 리스트 형태로 주어지며, 한 칸에 겹쳐질 수 있는 물건의 개수에는 제한이 없다고 가정합니다.
예를 들어 창고의 각 칸에 담겨있는 물건의 이름이storage = ["pencil", "pencil", "pencil", "book"], 각 물건의 개수가 num = [2, 4, 3, 1]이라면 연필과 책을 한 칸에 각각 겹쳐 쌓아 간단하게 clean_storage = ["pencil", "book"], clean_num = [9, 1]로 만들 수 있습니다.
주어진 solution 함수는 정리되기 전 창고의 물건 이름이 담긴 문자열 리스트 storage와 각 물건의 개수가 담긴 정수 리스트 num이 주어질 때, 정리된 창고에서 개수가 가장 많은 물건의 이름을 return 하는 함수입니다. solution 함수가 올바르게 작동하도록 한 줄을 수정해 주세요.
[답안]
class Solution {
public String solution(String[] storage, int[] num) {
int num_item = 0;
String[] clean_storage = new String[storage.length];
int[] clean_num = new int[num.length];
for(int i=0; i<storage.length; i++){
int clean_idx = -1;
for(int j=0; j<num_item; j++){
if(storage[i].equals(clean_storage[j])){
clean_idx = j;
break;
}
}
if(clean_idx == -1){
clean_storage[num_item] = storage[i];
clean_num[num_item] = num[i];
num_item += 1;
}
else{
clean_num[clean_idx] += num[i];
}
}
// 아래 코드에는 틀린 부분이 없습니다.
int num_max = -1;
String answer = "";
for(int i=0; i<num_item; i++){
if(clean_num[i] > num_max){
num_max = clean_num[i];
answer = clean_storage[i];
}
}
return answer;
}
}
'problem solving > 코딩 테스트' 카테고리의 다른 글
[코드업] 4833 : 쇠 막대기 (JAVA) (0) | 2024.11.19 |
---|---|
[프로그래머스] PCCE 기출문제 1~9번 (0) | 2024.10.05 |
[프로그래머스/JAVA] 가장 많이 받은 선물 (1) | 2024.07.05 |
[프로그래머스/JAVA] 나이 출력 (0) | 2024.07.01 |
[프로그래머스/JAVA] 마지막 두 원소 (0) | 2024.06.30 |