코딩테스트/SWExpertAcademy

간단한 369게임 C++(SW Expert Academy)

멍토 2020. 2. 4.

난이도 : D2

문제번호 : 1926

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PTeo6AHUDFAUq&categoryId=AV5PTeo6AHUDFAUq&categoryType=CODE

 

SW Expert Academy

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

swexpertacademy.com


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

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 까지의 숫자를

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

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

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

 

 

제약사항

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

입력

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

출력

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

예시

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

 


2. 문제풀이

간단하게 생각해서 풀었습니다.

나머지와 나누기 연산자를 이용하여 각자리수를 분리하였고

자리수가 3으로 나누어떨어질때마다 -를 출력했습니다.

 

3으로 한번도 나누어 떨어지지 않았다면 숫자를 출력하고 계속 반복합니다.

 


3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <string>
 
using namespace std;
 
//D2 1926 간단한 369게임
 
int main(){
    int a, t;
    cin >> a;
    //입력받은 횟수만큼 반복
    for(int i=1; i<=a; i++){
        t = i;
        bool check = true;
        //t가 0이될때까지 반복한다.
        //3으로 나누어떨어질시 -출력
        while(t){
        if( t%10 && (t%10)%3 == 0){
            cout <<"-";
            check = false;
                }
            t /= 10;
        }
        //위에서 한번도 걸리지 않았다면 숫자를 출력한다.
        if(check)   cout << i ;
        cout << " ";
    }
    return 0;
}

 

댓글

💲 광고입니다.