티스토리 뷰

728x90
:D 문제

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

 

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

  1 2 3 4 5 6 7 8 9

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

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

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

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

여기서 주의해야 것은 박수 때는 - 이며, 박수를 때는 - - 아닌 -- 이다

 

SW Expert Acadmy

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

 
:D 풀이 방법

나는 정규 표현식을 사용해서 해당 알고리즘을 풀었다. 내가 사용한 정규표현식 문법은 아래와 같다.

[] 문자의 집합을 의미

+ 1번 이상 반복을 의미

* 0번 이상 반복을 의미

 

 

 
:D 작성 코드

첫번째는 정규표현식을 두번 나누어 사용하여 문제를 풀었다. 첫번째로 369를 검사하고, 두번째에서 -(대시)기호가 붙어있는 경우를 찾아 다시 한번 치환해주었다.

package sw.expert.academy.exam1926;

import java.util.Scanner;

public class Solution1926H {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        String answer = "";
        for (int i = 1; i <= n; i++) {
            answer += i + " ";
        }
        answer = answer.replaceAll("[369]", "-");
        answer = answer.replaceAll("[0124578]+-|-[0124578]+", "-");

        System.out.println(answer);
    }
}

 

두번째 방법은 하나의 정규 표현식을 작성하여 해결해 보았다.

package sw.expert.academy.exam1926;

import java.util.Scanner;

public class Solution1926H_Review {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        String answer = "";
        for (int i = 1; i <= n; i++) {
            answer += i + " ";
        }

        answer = answer.replaceAll("[0124578]*[369][0124578]*", "-");
        System.out.println(answer);

    }
}

 

 

 

마무리

 

오랜만에 티스토리 블로그에 다시 글을 쓰고 싶었다! 그동안은 벨로그에서 포스팅해왔는데 이제부터라도 둘 다 꾸준히 활동을 하고 관리를 해야겠다. 티스토리에는 좀 더 알고리즘 중심으로 포스팅을 해보도록 노력해야겠다.!

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크