코딩테스트/프로그래머스

문자열 곱하기 ~ n의 배수

구너드 2023. 5. 26. 22:45

반복문을 이용해 k번만큼 my_string을 answer에 더해주면 쉽게 해결할 수 있는 문제.

 

class Solution {
    public String solution(String my_string, int k) {
        String answer = "";
        
        for(int i = 0; i < k; i++) {
           answer += my_string;
        }
        
        return answer;
    }
}

이런 식으로 쉽게 작성할 수 있었다.


처음 문제를 보고 생각해낸 것은 a와 b를 문자열로 변환하여 더해준 다음, 크기 비교를 할 때에는 다시 정수형으로 변환하여 조건문을 사용해 answer를 정의해주는 것이라고 생각했다.

        String ab = a + "" + b;
        String ba = b + "" + a;
        
        if ((int)ab > (int)ba || (int)ab == (int)ba) {
            answer = (int)ab;
        } else {
            answer = (int)ba;
        }

이를 기반으로 코드를 만들었는데 생긴 것도 그렇고 딱봐도 이상해보인다.

String 을 int형으로 변환하기 위해서 추가적인 공부가 필요하다고 느껴 자바의 정석을 찾아본 결과,

Integer.parseInt( ) 형태로 변환이 가능함을 알았다. 

        int a1 = Integer.parseInt(ab);
        int b1 = Integer.parseInt(ba);

 이런 식으로 문자열 ab,ba를 정수형으로 바꿔줄 수 있다

그리고 이 변수들을 활용하여 조건문을 만들게 되면

class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        
        String ab = a + "" + b;
        String ba = b + "" + a;
        
        int a1 = Integer.parseInt(ab);
        int b1 = Integer.parseInt(ba);
        
        if (a1 > b1 || a1 == b1) {
            answer = a1;
        } else {
            answer = b1;
        }
        return answer;
    }
}

이와 같은 형태를 만들 수 있었고 테스트를 돌려본 결과 통과할 수 있었다.

다만 선언한 변수들도 많고 코드 자체가 복잡하다고 느껴져서 다른 사람들의 제출결과를 찾아봤는데, 

class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        int aLong = Integer.parseInt(""+a+b);
        int bLong = Integer.parseInt(""+b+a);
        answer = aLong > bLong ? aLong : bLong;

        return answer;
    }
}

이런 식으로 Integer.parseInt의 괄호 안에 식을 적고, 삼항연산자를 이용하여 가독성이 좋은 코드로 바꿀 수 있다는 점을 알게 되었다. 

문자열을 int형으로 변환하기 위해서 Integer.parseInt( )를 사용한다는 점은 기억해두자.


 위의 문제를 살짝 변형한 문제. 이번에는 쉽게 풀 수 있었다.

class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        
        int x = Integer.parseInt("" + a + b);
        int y = 2 * a * b;
        
        answer = x >= y ? x : y;
        return answer;
    }
}

나머지 연산자를 사용하면 쉽게 풀수 있는 문제다. 기존 answer의 값을 0으로 설정하고 num이 n의 배수일 때만 answer의 값을 1로 바꾸어주면 보다 깔끔한 코드를 작성할 수 있다.

int answer = 0;
        if(num % n == 0) answer = 1;
        return answer;

 

자바를 공부하면서 if문의 블럭 안에 수행될 문장이 하나라면 블럭을 생략할 수 있다고 배웠었다. 이를 좀 더 확실하게 알 수 있었는데, if문에서 실행문이 하나라면 블럭을 생략할 수 있다.

 

추가적으로 다른 사람들의 코드에서는 삼항연산자를 사용하는 모습을 많이 볼 수 있었다.

class Solution {
    public int solution(int num, int n) {
        int answer = num % n == 0 ? 1 : 0;
        return answer;
    }
}

삼항 연산자를 사용하면 보다 간결한 코드를 작성할 수 있다는 점.