본문 바로가기

Chapter01/고딩데스드

[고딩데스드] 프로그래머스 코딩 기초 트레이닝 > 문자열 섞기 , 분수의 덧셈 , 중앙값 구하기

코딩테스트 연습 > 코딩 기초 트레이닝 > 문자열 섞기

문제 설명
길이가 같은 두 문자열 str1과 str2가 주어집니다.

두 문자열의 각 문자가 앞에서부터 서로 번갈아가면서 한 번씩 등장하는 문자열을 만들어 return 하는 solution 함수를 완성해 주세요.

제한사항
1 ≤ str1의 길이 = str2의 길이 ≤ 10
str1과 str2는 알파벳 소문자로 이루어진 문자열입니다.


입출력 예
str1 str2 result
"aaaaa" "bbbbb" "ababababab"

 

class Solution {
    public String solution(String str1, String str2) {
         StringBuilder answer = new StringBuilder();
        
        for (int i = 0; i < str1.length(); i++) {
            answer.append(str1.charAt(i));
            answer.append(str2.charAt(i));
        }
        
        return answer.toString();
    }
}

 

 

 

 

 



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

문제 설명
첫 번째 분수의 분자와 분모를 뜻하는 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 commonDenom = denom1 * denom2; // 공통 분모 계산
        int newNumer = numer1 * denom2 + numer2 * denom1; // 새 분자 계산
        
        int gcd = findGCD(newNumer, commonDenom); // 최대공약수 계산

        // 기약 분수로 만들기
        newNumer /= gcd;
        commonDenom /= gcd;
        
        int[] answer = {newNumer, commonDenom};
        return answer;
    }

    // 최대공약수 계산 메서드
    private int findGCD(int a, int b) {
        if (b == 0) {
            return a;
        }
        return findGCD(b, a % b);
    }
}

 

 

제법이다 너 ,,,,,ㅎ


 

코딩테스트 연습 > 코딩테스트 입문 > 중앙값 구하기

문제 설명
중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

제한사항
array의 길이는 홀수입니다.
0 < array의 길이 < 100
-1,000 < array의 원소 < 1,000
입출력 예
array result
[1, 2, 7, 10, 11] 7
[9, -1, 0] 0


입출력 예 설명


입출력 예 #1
본문과 동일합니다.


입출력 예 #2
9, -1, 0을 오름차순 정렬하면 -1, 0, 9이고 가장 중앙에 위치하는 값은 0입니다.

import java.util.Arrays;

class Solution {
    public int solution(int[] array) {
       Arrays.sort(array);
       
       return array[array.length/2];
    }
}

 

다른사람의 풀이

import java.util.Arrays;

class Solution {
    public int solution(int[] array) {
        Arrays.sort(array);
        return array[array.length >> 1];
    }
}

 

댓글을 보니 시프트 연산이 조금 더 성능이 좋다고함.

큰 차이 없어서 가독성을 고려해 / 이 더 낫겠다는 댓글도있음