[SWEA] D2 - 1926번 | 간단한 369게임

EllievV·2024년 11월 14일

🐊 CodingTest

목록 보기
14/18

🔍 문제 보러 가기

1부터 N까지의 수 중 차례대로 출력하는데 3, 6, 9가 포함된 경우 - 로 변환해 출력한다.

문제 상세 설명
3 6 9 게임을 프로그램으로 제작중이다. 게임 규칙은 다음과 같다.
  1. 숫자 1부터 순서대로 차례대로 말하되, “3” “6” “9” 가 들어가 있는 수는 말하지 않는다.

  2. "3" "6" "9"가 들어가 있는 수를 말하지 않는대신, 박수를 친다. 이 때, 박수는 해당 숫자가 들어간 개수만큼 쳐야 한다.
    예를 들어 숫자 35의 경우 박수 한 번, 숫자 36의 경우 박수를 두번 쳐야 한다.

입력으로 정수 N 이 주어졌을 때, 1~N 까지의 숫자를

게임 규칙에 맞게 출력하는 프로그램을 작성하라.

박수를 치는 부분은 숫자 대신, 박수 횟수에 맞게 “-“ 를 출력한다.

여기서 주의해야 할 것은 박수 한 번 칠 때는 - 이며, 박수를 두 번 칠 때는 - - 가 아닌 -- 이다.

[제약사항]

N은 10이상 1,000이하의 정수이다. (10 ≤ N ≤ 1,000)

[입력]

입력으로 정수 N 이 주어진다.

[출력]

1 ~ N까지의 숫자를 게임 규칙에 맞게 출력한다.

입력출력
101 2 - 4 5 - 7 8 - 10

내 코드

package D2;

//SWEA D2 1926번 "간단한 369게임" 문제 풀이

import java.util.*;

public class N1926_a {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		int N = scanner.nextInt();
		
		System.out.print(solution(N));
		
		scanner.close();
		
	}
	
	public static String solution(int N) {
		
		StringBuilder result = new StringBuilder();
		
		for (int i = 1; i <= N; i++) {
			result.append(transfer(i));
			
			if (i < N) result.append(" ");
		}
		
		return result.toString();
	}
	
	public static String transfer(int num) {
		
		StringBuilder number = new StringBuilder();
		
		int n = num;
		
		while(n > 0) {
			if (n % 10 == 3 || n % 10 == 6 || n % 10 == 9) {
				number.append("-");
			}
			n /= 10;
		}
				
		if (number.length() == 0) number.append(num);
		
		return number.toString();
	}
}

접근 방법

  1. 1부터 N까지의 수에서 하나씩 확인한다. n % 10을 통해 뒷자리를 하나씩 확인한다.
  2. 3 또는 6또는 9 가 있다면 -로 변환한다.
  3. n /= 10 을 통해 검사한 뒷자리를 없애고 n > 0 까지 반복한다.
  4. 변환한 값을 반환하고 만약, number.length()가 0인 경우 3, 6, 9 가 없는 수이기 때문에 수를 그대로 반환한다.

개선 코드

package D2;

//SWEA D2 1926번 "간단한 369게임" 문제 풀이

import java.util.*;

public class N1926_a {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		int N = scanner.nextInt();
		
		System.out.print(solution(N));
		
		scanner.close();
		
	}
	
	public static String solution(int N) {
		
		StringBuilder result = new StringBuilder();
		
		for (int i = 1; i <= N; i++) {
			result.append(transfer(i));
			
			if (i < N) result.append(" ");
		}
		
		return result.toString();
	}
	
	public static String transfer(int num) {
		boolean has369 = false;
		StringBuilder number = new StringBuilder();
		
		int n = num;
		while(n > 0) {
			int digit = n % 10;
			if (digit == 3 || digit == 6 || digit == 9) {
				has369 = true;
				number.append("-");
			}
			n /= 10;
		}
		// 조건문 단순화
		return has369 ? number.toString() : String.valueOf(num);
		
	}
}

point

  1. 단순화된 조건문 : has369 변수를 통해 3, 6, 9가 하나라도 포함되어 있으면 number에 -를 추가한다.

0개의 댓글