티스토리 뷰
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
나는 정규 표현식을 사용해서 해당 알고리즘을 풀었다. 내가 사용한 정규표현식 문법은 아래와 같다.
[] 문자의 집합을 의미
+ 1번 이상 반복을 의미
* 0번 이상 반복을 의미
첫번째는 정규표현식을 두번 나누어 사용하여 문제를 풀었다. 첫번째로 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);
}
}
마무리
오랜만에 티스토리 블로그에 다시 글을 쓰고 싶었다! 그동안은 벨로그에서 포스팅해왔는데 이제부터라도 둘 다 꾸준히 활동을 하고 관리를 해야겠다. 티스토리에는 좀 더 알고리즘 중심으로 포스팅을 해보도록 노력해야겠다.!
'ALGORITHM > SWEA' 카테고리의 다른 글
[SWEA] 1953. [모의 SW 역량테스트] 탈주범 검거(JAVA) (0) | 2022.09.29 |
---|---|
[SWEA] 1210. [S/W 문제해결 기본] 2일차 - Ladder1(JAVA) (0) | 2022.08.24 |
[SWEA] 2007. 패턴 마디의 길이(JAVA) (0) | 2022.08.11 |
[SWEA] 2001. 파리퇴치 (JAVA) (0) | 2022.07.28 |
- Total
- Today
- Yesterday