[SWEA / Java] 1926. 간단한 369게임

이하얀·2024년 5월 21일
0

🧢 SWEA

목록 보기
8/10
post-thumbnail

문제 설명


💡 Info

내용

3 6 9 게임을 프로그램으로 제작중이다. 게임 규칙은 다음과 같다.

  1. 숫자 1부터 순서대로 차례대로 말하되, “3”, “6”, “9”가 들어가 있는 수는 말하지 않는다.

  2. “3”, “6”, “9”가 들어가 있는 수를 말하지 않는 대신, 박수를 친다.

    이때, 박수는 해당 숫자가 들어간 개수만큼 쳐야 한다.

    예를 들어 숫자 35의 경우 박수 한번, 숫자 36의 경우 박수를 두번 쳐야 한다.

입력으로 정수 N이 주어졌을 때, 1~N까지의 숫자를 게임 규칙에 맞게 출력하는 프로그램을 작성하라.

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

📥입력 조건

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

📤출력 조건

  • 1 ~ N까지의 숫자를 게임 규칙에 맞게 출력한다.
1 2 - 4 5 - 7 8 - 10


유의 사항 및 제약 조건


  • 여기서 주의해야 할 것은 박수 한번 칠때는 - 이며, 박수를 두번칠때는 - - 가 아닌 —이다.
  • N은 10이상 1,000이하의 정수이다.(10≤ N ≤ 1,000)


문제 이해


  • 3 6 9 게임 구현하기
    • 3, 6, 9에 해당하는 숫자는 -로 출력


알고리즘


실제 풀이 시간 : 24분

  • 입력
    • N 입력받기
  • 계산
  • 1부터 N까지의 숫자를 1부터 차례대로 살피기
    • arr 배열 생성하기
    • i == 3 || 6 || 9일 경우 -로 출력하는 조건 추가하기
  • 출력
    • arr[i] 출력하기
package D2;

import java.util.Scanner;
import java.io.FileInputStream;

class s1926
{
	public static void main(String args[]) throws Exception
	{

		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt();
		int num = 0;
		
		String[] arr = new String[N+1];
		
		for(int i=1; i<=N; i++) {
			if(i % 3 == 0 || i % 6 == 0 || i % 9 == 0) {
				arr[i] = "-";
			}
			System.out.print(arr[i] + " ");
		}	
	}
}


오답 체크


  • 숫자 부분이 null로 출력되는 문제 발생
    • Integer.toString(i)를 통해 숫자로 변경해 출력하는 것으로 해결
//before
for(int i=1; i<=N; i++) {
	if(i % 3 == 0 || i % 6 == 0 || i % 9 == 0) {
		arr[i] = "-";
	}
	System.out.print(arr[i] + " ");
}	
//after
for(int i=1; i<=N; i++) {
	arr[i] = Integer.toString(i);
	if(i % 3 == 0 || i % 6 == 0 || i % 9 == 0) {
		arr[i] = "-";
	}
	System.out.print(arr[i] + " ");
	}
  • 10은 통과하지만, 결과적으로 테스트 케이스가 실패함.
    • 33과 같이 숫자가 함께 들어 있는 경우를 인식하지 못하기 때문임.
    • 3,6,9를 감지하는 조건을 변경!
      • arr[i]를 Integer.toString(i) → String.valueOf(i)로 변경
      • 또한, j를 추가하여 같은 1개의 수 안에서 3,6,9를 감지하고 —로 붙여 작성할 수 있도록 조건을 추가함.
//ing
for(int i=1; i<=N; i++) {
	arr[i] = Integer.toString(i);
	 if (arr[i].contains("3") || arr[i].contains("6") || arr[i].contains("9")) {
		arr[i] = "-";
	}
	System.out.print(arr[i] + " ");
}

//after
for(int i=1; i<=N; i++) {
			
	arr[i] = String.valueOf(i);
	
	 if (arr[i].contains("3") || arr[i].contains("6") || arr[i].contains("9")) {
		for(int j=0; j<arr[i].length(); j++) {
			if(arr[i].charAt(j) == '3' || arr[i].charAt(j) == '6' || arr[i].charAt(j) == '9') {
				System.out.print("-");
			}
		}
		System.out.print(" ");
	}
	else {
	System.out.print(arr[i] + " ");
	}
	}


최종 풀이


실제 풀이 시간 : 1시간 8분(첫 풀이 시간 포함)

  • 내용
import java.util.Scanner;
import java.io.FileInputStream;

class Solution
{
	public static void main(String args[]) throws Exception
	{

		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt();
		
		String[] arr = new String[N+1];
		
		for(int i=1; i<=N; i++) {
			
			arr[i] = String.valueOf(i);
			
			 if (arr[i].contains("3") || arr[i].contains("6") || arr[i].contains("9")) {
				for(int j=0; j<arr[i].length(); j++) {
					if(arr[i].charAt(j) == '3' || arr[i].charAt(j) == '6' || arr[i].charAt(j) == '9') {
						System.out.print("-");
					}
				}
				System.out.print(" ");
			}
			else {
			System.out.print(arr[i] + " ");
			}
		}
	}
}



⭐코드 비교⭐

replace 이용해 바로 출력하는 방법 활용하기


솔루션


import java.util.Scanner;
import java.io.FileInputStream;

class Solution
{
	public static void main(String args[]) throws Exception
	{

		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt();
		
		String[] arr = new String[N+1];
		
		for(int i=1; i<=N; i++) {
			arr[i] = String.valueOf(i);
			if (arr[i].contains("3") || arr[i].contains("6") || arr[i].contains("9")) {
				 arr[i]= arr[i].replace("3", "-");
         arr[i]= arr[i].replace("6", "-");
         arr[i]= arr[i].replace("9", "-");

         arr[i]= arr[i].replace("0", "");
         arr[i]= arr[i].replace("1", "");
         arr[i]= arr[i].replace("2", "");
         arr[i]= arr[i].replace("4", "");
         arr[i]= arr[i].replace("5", "");
         arr[i]= arr[i].replace("7", "");
         arr[i]= arr[i].replace("8", "");
			 }
			 System.out.print(arr[i] + " ");
		}
	}
}
  • replace를 이용하면 해당 숫자가 있는 부분만 -를 넣어주어 별도로 띄어쓰기를 신경쓰지 않아도 됨!!

실행 결과



배운점


  • replac의 개념을 더 정확히 파악하고, 띄어쓰기를 신경쓰는 코드보다 더 명료한 알고리즘을 작성하는 방법을 배웠다.
profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE 개발 기록 노트☘️

0개의 댓글