IT/코딩테스트

[프로그래머스] 수박수박수박수박수?

_KH_ 2025. 6. 3. 00:12

문제


한글 코딩

홀수이면 수로 끝나게 출력
	(n%2)만큼 수박 출력하고 + 수 한글자 추가
	
	짝수이면 박으로 끝나게 출력
	(n%2)만큼 수박 출력하고

	
	int n = 11 일때,
	(n%2) == 0이면 {
		sout("수박")*2;
	} 아니면 {
		sout("수박")*2 + "수";
	}

내가 작성한 코드

class Solution {

    public static void main(String[] args) {
        int n = 11;

        String result = solution(n);
        System.out.println(result);
    }

        public static String solution(int n) {
            String answer = "";
            if(n%2 != 0) {
                for(int i = 1; i <= n/2; i++) {
                    answer += "수박";
                }
                answer += "수";
            } else {
                for(int i = 1; i <= n/2; i++) {
                    answer += "수박";
                }
            }
            return answer;
        }

고민했던 점

1. n값 대입

Scanner로 받게끔 해야하나 고민하다가 그냥 n = 11;로 초기화했다

2. 메서드 구현

보니까 solution이 n을 매개변수로 갖는 메서드이길래 메서드로 구현해서 main안에서 가져다쓰도록 구현함

3. 연산자 헷갈림

n을 나눠서 (% 사용) 나머지가 1일 경우에 “수”를 추가로 붙여야 하는데 /로 작성해서 에러가 났음. 연산자 구별 잘 하고 쓰기

4. 등호 생각 잘 하기

≤, <의 경우도 4/2 =2 의 경우 2까지 포함해서 수박을 2번 출력해야 하는데 처음에 < 로 작성해서 수박수박수가 필요할 때 수박수가 나옴. 등호도 잘 보자

5. System.out.println

main 안에서는 main 밖에 있는 메서드를 호출해서 사용하고, result라는 String형 변수에 저장해서 result를 sout로 출력해주어야지만 화면에 수박수박~이 출력된다.

sout도 사용 안해놓고 왜 출력이 안되지? 했던 바보같은 사람..

solution(n); 만 호출하고 리턴값을 저장하거나 출력하지 않으면 아무 일도 일어나지 않는다.

6. answer += “수박” >> 문자열 연결

문자열을 연결할 때는 System.out.println()*2 이 아니고 선언해둔 문자열 변수에 +=로 계속 이어붙이면 된다.

문자열을 answer 변수에 담으려면 System.out.print(...) 대신 answer += ... 식으로 누적할 것!


다른 방식들

1) 삼항 연산자 사용하기

public static String solution(int n) {
    String answer = "";

    for (int i = 0; i < n; i++) {
        answer += (i % 2 == 0) ? "수" : "박";
    }

    return answer;
}

 

2) StringBuilder 사용하기

class Solution {

    public static void main(String[] args) {
        int n = 11;

        String result = solution(n);
        System.out.println(result);
    }

    public static String solution(int n) {
        StringBuilder answer = new StringBuilder();

        for (int i = 0; i < n; i++) {
            if (i % 2 == 0) {
                answer.append("수");
            } else {
                answer.append("박");
            }
        }

        return answer.toString();
    }
}

 

String을 +=로 반복해서 누적하면, 내부적으로 새로운 문자열 객체를 계속 생성해서 성능이 안좋아진다.

그러므로 StringBuilder리팩토링 가능함.

 

※ 내 코드와 StringBuilder를 사용했을 때의 성능 차이

방법 성능 설명
String += 느림 (O(n²)) 문자열이 매번 새로 생성됨
StringBuilder 빠름 (O(n)) 버퍼에 누적, 메모리 효율적 사용

'IT > 코딩테스트' 카테고리의 다른 글

[CodeUp] 3130 : 소들의 헤어스타일  (1) 2025.06.08
[CodeUp] 3117 : 0은 빼!  (2) 2025.06.05
[프로그래머스] 올바른 괄호  (1) 2025.06.02