본문 바로가기

Chapter01/고딩데스드

[고딩데스드] 코딩테스트 입문 > 편지 , 머쓱이보다 키가 큰 사람, 배열 자르기, 분수의 덧셈

코딩테스트 입문  > 편지

문제 설명
머쓱이는 할머니께 생신 축하 편지를 쓰려고 합니다. 할머니가 보시기 편하도록 글자 한 자 한 자를 가로 2cm 크기로 적으려고 하며, 편지를 가로로만 적을 때, 축하 문구 message를 적기 위해 필요한 편지지의 최소 가로길이를 return 하도록 solution 함수를 완성해주세요.

제한사항
공백도 하나의 문자로 취급합니다.
1 ≤ message의 길이 ≤ 50
편지지의 여백은 생각하지 않습니다.
message는 영문 알파벳 대소문자, ‘!’, ‘~’ 또는 공백으로만 이루어져 있습니다.


입출력 예
message result
"happy birthday!"  30
"I love you~"  22

입출력 예 #1
message의 글자 수가 15개로 최소 가로 30cm의 편지지가 필요합니다.

입출력 예 #2
message의 글자 수가 11개로 최소 가로 22cm의 편지지가 필요합니다.

class Solution {
    public int solution(String message) {
        int answer = (message.length()*2);
        return answer;
    }
}

 

다른 사람의 풀이

 

ㅋㅋㅋㅋㅋ이렇게 줄여버리넹 워후

class Solution {
    public int solution(String message) {
        return message.length()*2;
    }
}

 


코딩테스트 입문  >  머쓱이보다 키가 큰 사람

문제 설명
머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때, 머쓱이보다 키 큰 사람 수를 return 하도록 solution 함수를 완성해보세요.

제한사항
1 ≤ array의 길이 ≤ 100
1 ≤ height ≤ 200
1 ≤ array의 원소 ≤ 200


입출력 예
array height result
[149, 180, 192, 170] 167 3
[180, 120, 140] 190 0

입출력 예 설명

입출력 예 #1
149, 180, 192, 170 중 머쓱이보다 키가 큰 사람은 180, 192, 170으로 세 명입니다.

입출력 예 #2
180, 120, 140 중 190보다 큰 수는 없으므로 0명입니다.

 

 

class Solution {
    public int solution(int[] array, int height) {
        int answer = 0;
        
        for(int i = 0; i < array.length; i++){
            if(height < array[i]){
                answer += 1;
            }
        }
        return answer;
    }
}

 

다른 사람의 풀이

좀 더 깔끔

class Solution {
    public int solution(int[] array, int height) {
        int answer = 0;
        for(int i: array){
            answer += (i>height) ? 1 : 0;
        }
        return answer;
    }
}

 

 


 

코딩테스트 입문  >  배열 자르기

문제 설명
정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.



제한사항
2 ≤ numbers의 길이 ≤ 30
0 ≤ numbers의 원소 ≤ 1,000
0 ≤num1 < num2 < numbers의 길이


입출력 예
numbers num1 num2 result
[1, 2, 3, 4, 5] 1 3 [2, 3, 4]
[1, 3, 5] 1 2 [3, 5]


입출력 예 설명

입출력 예 #1
[1, 2, 3, 4, 5]의 1번째 인덱스 2부터 3번째 인덱스 4 까지 자른 [2, 3, 4]를 return 합니다.

입출력 예 #2
[1, 3, 5]의 1번째 인덱스 3부터 2번째 인덱스 5까지 자른 [3, 5]를 return 합니다.

 

 

다른사람들 보니까 import도 하길래,,나두,,

from <= 범위< to 니까 +1 하기

import java.util.Arrays;

class Solution {
    public int[] solution(int[] numbers, int num1, int num2) {
        int[] s = Arrays.copyOfRange(numbers,num1,num2+1);
      
        return s;
    }
}

 

다른 사람의 풀이

 

아깝다,,,,, 거의 비슷해써

import java.util.*;

class Solution {
    public int[] solution(int[] numbers, int num1, int num2) {
        return Arrays.copyOfRange(numbers, num1, num2 + 1);
    }
}

 


 

 

코딩테스트입문 > 분수의 덧셈

문제 설명
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

제한사항
0 <numer1, denom1, numer2, denom2 < 1,000


입출력 예
numer1 denom1 numer2 denom2 result
1 2 3 4 [5, 4]
9 2 1 3 [29, 6]


입출력 예 설명


입출력 예 #1
1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.


입출력 예 #2
9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.

 

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int[] answer = {(numer1 *denom2)+(numer2*denom1) , denom1*denom2};
        
        int min = Math.min(answer[0], answer[1]);
        
        for(int i = 2 ; i<=min;i++){
               if(answer[0] % i == 0 && answer[1] % i == 0 ){
                    answer[0] /= i;
                    answer[1] /= i;
            }
        }
        return answer;
    }
}

 

왜구래,,,,,,,, 뭐때문인데ㅜ,,,

 

 죽어도모르겟다..투비컨티뉻,

아 드디어 풀었ㄷㅏㅋㅋㅋㅋㅋㅋㅋㅋㅋ,,,

아무거나 제출하고 답 봤었어서 점수는 안나오지만,,

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int[] answer = {(numer1 *denom2)+(numer2*denom1) , denom1*denom2};
        
        int min = Math.min(answer[0], answer[1]);
        
        for(int i = min; i >= 2; i--){
               if(answer[0] % i == 0 && answer[1] % i == 0 ){
                    answer[0] /= i;
                    answer[1] /= i;
            }
        }
        return answer;
    }
}

 

2부터 작은 수까지 더해가면서 나누다보니

2로 한 번 더 나눠지거나 하는 수 들이 있었나보다! 

ㅎㅎㅎㅎㅎㅎㅋ ㅎㅎㅎㅎ

약분 할 때 다 안되면 마지막에 2로 나누는건데 바보,,ㅎㅎㅎ