코딩테스트

[5주차] 코딩테스트 풀이 (2022.05.09~2022.05.13)

Jinyiji 2022. 5. 15. 00:28

 

JAVA로 코딩테스트 Level.1 문제 풀기 5주 차

 


중간고사 기간을 건너 뛰고 돌아왔습니다... 5주 차도 파이팅..!

 

 

2022년 5월 9일 월요일 / 직사각형 별찍기

 

📢 문제 설명

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.

 
 
👇🏻 제한 조건
 
  • n과 m은 각각 1000 이하인 자연수입니다.

 

 

🧐 예시 

 

입력

5 3

 

출력

*****
*****
*****

 

 

💡 문제 풀이 및 주석

 

public class 직사각형별찍기 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();

        // 세로 b 만큼 반복
        for (int i=0; i<b; i++) {
            // 가로 a 만큼 반복
            for (int j=0; j<a; j++) {
                System.out.print("*");
            }
            // 줄넘김
            System.out.println();
        }
    }
}

 


 

2022년 5월 10일 화요일 / 2016년

 

📢 문제 설명
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a , b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요.
요일의 이름은 일요일부터 토요일까지 각각 SUN, MON, TUE, WED, THU, FRI, SAT입니다.
예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.

 

 

👇🏻 제한 조건
 
  • 2016년은 윤년입니다.
  • 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)

 

 

🧐 입출력 예

 


a b result
5 24 "TUE"

 

💡 문제 풀이 및 주석

 

public class _2016년 {
    public String solution(int a, int b) {
        String answer = "";
        String[] day = {"SUN", "MON","TUE","WED","THU","FRI","SAT"};
        int[] month = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        // 2016년 지나간 날짜 수
        int dates = 0;
        for (int i=0; i<a-1; i++) {
            dates += month[i];
        }
        dates += b;

        // 2016년 요일. 1월 1일은 금요일이므로 4를 더해준다.
        int yoil = (dates + 4) % 7;

        answer = day[yoil];

        return answer;
    }
}

 


 

2022년 5월 11일 수요일 / 숫자 문자열과 영단어

 

📢 문제 설명

 

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"

이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.

숫자 영단어
0 zero
1 one
2 two
3 three
4 four
5 five
6 six
7 seven
8 eight
9 nine

 

👇🏻 제한 조건


  • 1 ≤ s의 길이 ≤ 50
  • s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
  • return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.

 

 
🧐 입출력 예
 

s result
"one4seveneight" 1478
"23four5six7" 234567
"2three45sixseven" 234567
"123" 123

 

 
🖍️ 입출력 예 설명

 

입출력 예 #1

  1. 문제 예시와 같습니다.

입출력 예 #2

  1. 문제 예시와 같습니다.

입출력 예 #3

  1. "three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
  2. 입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.

입출력 예 #4

  1. s에는 영단어로 바뀐 부분이 없습니다.
 
🕒 제한시간 안내
  • 정확성 테스트 : 10초

 

 

💡 문제 풀이 및 주석

public class 숫자문자열과영단어 {
    public int solution(String s) {
        // 숫자 영단어 배열
        String[] numbers = {"zero","one","two","three","four","five","six","seven","eight","nine"};
        
        int answer = 0;
        String tmp = "";
        for (int i=0; i<s.length(); i++) {
            // 숫자이면
            if (0<=s.charAt(i) && s.charAt(i)<=9) {
                answer = 10 * answer + s.charAt(i);
            } else {
                // 문자열이면
                tmp += s.substring(i,i+1);
                for (int j=0; j<10; j++) {
                    if (tmp.equals(numbers[j])) {
                        answer = 10 * answer + j;
                        tmp = "";
                        break;
                    }
                }
            }
        }
        return answer;
    }
}

 


2022년 5월 12일 목요일 / 콜라츠 추측

 

📢 문제 설명

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.
1-1. 입력된 수가 짝수라면 2로 나눕니다. 
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.
예를 들어, 입력된 수가 6이라면 6→3→10→5→16→8→4→2→1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요.

 

 

👇🏻 제한 조건

 

  • 입력된 수, num은 1 이상 8000000 미만인 정수입니다.

 

 

🧐 입출력 예

 

 

n result
6 8
16 4
626331 -1

🖍️ 입출력 예 설명

 

입출력 예 #1
문제의 설명과 같습니다.

 

입출력 예 #2
16 -> 8 -> 4 -> 2 -> 1 이 되어 총 4번 만에 1이 됩니다.

 

입출력 예 #3
626331은 500번을 시도해도 1이 되지 못하므로 -1을 리턴해야 합니다.

 

 

💡 문제 풀이 및 주석

 

public class 콜라츠추측 {
    public int solution(int num1) {
        int answer = -1;
        
        // 1일 때는 0 리턴
        if (num1==1) return 0;

        // 오버플로우 방지를 위해 long 형으로 처리
        long num = (long) num1;
        
        // 500번 시도
        for (int i=0; i<500; i++) {
            if (num%2 == 0) {   // 짝수일 때 처리
                num /= 2;
                // 결과가 1이면 시도횟수 리턴
                if (num==1) {
                    return i+1;
                }
            } else {    // 홀수일 때 처리
                num = num * 3 + 1;
            }
        }
        
        return answer;
    }
}

 


 

2022년 5월 13일 금요일 / 부족한 금액 계산하기

 

📢 문제 설명

새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다.
이 놀이기구의 원래 이용료는 price원인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다.
즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.

놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.

단, 금액이 부족하지 않으면 0을 return 하세요.

 

 

👇🏻 제한 조건

 

  • 놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수
  • 처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수
  • 놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수

 

 

🧐 입출력 예

 

price money count result
3 20 4 10

 

🖍️ 입출력 예 설명

 

입출력 예 #1
이용금액이 3인 놀이기구를 4번 타고 싶은 고객이 현재 가진 금액이 20이라면,

총 필요한 놀이기구의 이용 금액은 30 (= 3+6+9+12) 이 되어 10만큼 부족하므로 10을 return 합니다.

 

 

🔍 참고 사항

 

  • 미션 언어는 Java, JavaScript, Python3, C++ 만 해당됩니다.
  • 같은 코드를 제출한 사람이 여럿이라면 코드를 가장 먼저 제출한 분께 상품을 드립니다.
  • 좋아요 수가 동일할 경우 코드를 가장 먼저 제출한 분께 상품을 드립니다.

 

 

💡 문제 풀이 및 주석

 

public class 부족한금액계산하기 {
    public long solution(int price, int money, int count) {
        long answer = -1;
        
        // 이용료 계산
        long sum = 0;
        for (int i=1; i<=count; i++) {
            sum += i;
        }
        sum *= price;
        
        // 모자라는 금액 계산
        answer = sum - money;
        
        // 부족하지 않으면 0 리턴
        if (answer<0) return 0;

        return answer;
    }
}

 


 

JAVA로 코딩테스트 Level.1 문제 풀기 5주 차 완료!!!!!