Notice
Recent Posts
Recent Comments
Link
DY N DY
실력키우기 주사위던지기1(C++) 본문
1169 : 주사위 던지기1
제한시간: 1000 ms 메모리제한: 32 MB
해결횟수: 592 회 시도횟수: 1319 회
주사위를 던진 횟수 N과 출력형식 M을 입력 받아서 M의 값에 따라 각각 아래와 같이 출력하는 프로그램을 작성하시오.
M = 1 : 주사위를 N번 던져서 나올 수 있는 모든 경우
M = 2 : 주사위를 N번 던져서 중복이 되는 경우를 제외하고 나올 수 있는 모든 경우
M = 3 : 주사위를 N번 던져서 모두 다른 수가 나올 수 있는 모든 경우
* 중복의 예
1 1 2 와 중복 : 1 2 1, 2 1 1
1 2 3 과 중복 : 1 3 2, 2 1 3, 2 3 1, 3 1 2
[Copy]3 1 | [Copy]1 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 2 1 … 6 6 6 |
[Copy]3 2 | [Copy]1 1 1 1 1 2 … 1 1 6 1 2 2 … 5 6 6 6 6 6 |
[Copy]3 3 | [Copy]1 2 3 1 2 4 1 2 5 1 2 6 1 3 2 1 3 4 … 6 5 3 6 5 4 |
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | /************************************************************** Problem: 1169 User: a132034 Language: C++ Result: Success Time:12 ms Memory:1740 kb ****************************************************************/ #include <iostream> using namespace std; static int dice[5]; static int loc = 1; void Throw( int N, int M); int main() { int N, M; cin >> N >> M; dice[0] = 1; Throw(N, M); return 0; } void Throw( int N, int M) { if (M == 1) { for ( int i = 1; i <= 6; ++i) { dice[loc] = i; if (loc == N) { for ( int j = 1; j <= N; ++j) cout << dice[j] << " " ; cout << endl; } else { loc++; Throw(N, M); loc--; } } } else if (M == 2) { for ( int i = dice[loc - 1]; i <= 6; ++i) { dice[loc] = i; if (loc == N) { for ( int j = 1; j <= N; ++j) cout << dice[j] << " " ; cout << endl; } else { loc++; Throw(N, M); loc--; } } } else if (M == 3) { for ( int i = 1; i <= 6; ++i) { bool flg = true ; for ( int k = 1; k < loc; ++k) { if (dice[k] == i) flg = false ; } if (!flg) continue ; dice[loc] = i; if (loc == N) { for ( int j = 1; j <= N; ++j) cout << dice[j] << " " ; cout << endl; } else { loc++; Throw(N, M); loc--; } } } } |
기존에 풀었던 기초다지기를 응용해서 풀었다.
590 : 함수3 - 자가진단4 http://dyndy.tistory.com/135
자세한 설명은 여기 있으며 2번의 경우와 완전 동일하다.
1번의 경우 시작을 2번과 같이 (52번줄이 2번의 시작, 32번줄이 1번의 시작) 전 주사위 숫자가 아닌 1부터 시작하는 것으로 변경해주었더니 간단히 해결되었고,
3번의 경우 bool값을 추가하여 이전의 주사위에 없는 숫자일 경우에만 기존 루프를 돌게 하고 그 외에는 continue로 바로 다음 i값을 주사위값에 넣을지 말지 검사하는 방법을 이용해서 간단히 풀었다.
'PARK > ALGORITHM' 카테고리의 다른 글
BOJ 2193 이친수(C++) (0) | 2016.08.10 |
---|---|
BOJ 10828 스택(C++) (0) | 2016.08.10 |
실력키우기 주사위던지기2(C++) (0) | 2016.08.07 |
실력키우기 떡 먹는 호랑이(C++) (0) | 2016.08.06 |
실력키우기 나는 학급회장이다. (투표) (C++) (0) | 2016.08.04 |