본문 바로가기

Computer Science&Engineering/코딩테스트

[백준 2659] 십자카드 문제 C++ 풀이

# 문제링크

www.acmicpc.net/problem/2659

 

2659번: 십자카드 문제

입력은 한 줄로 이루어지며, 이 한 줄은 카드의 네 모서리에 씌여있는 1 이상 9 이하의 숫자 4개가 시계 방향으로 입력된다. 각 숫자 사이에는 빈칸이 하나 있다.

www.acmicpc.net

모든 시계수를 만들어 visited 에 체크하고, 주어진 수 까지 앞에 몇개가 있었는지 확인했습니다. 시계수를 만들 때 4중 for 문을 사용했는데 이렇게 하는 게 맞는지 모르겠네... 하면서 했습니다. 더 좋은 방법이 있을지도..

 

# 제출 코드 

 

#include <iostream>
#include <algorithm>
using namespace std;

bool visited[10000];

int get_num(int a, int b, int c, int d) {
    int num1 = a * 1000 + b * 100 + c * 10 + d;
    int num2 = b * 1000 + c * 100 + d * 10 + a;
    int num3 = c * 1000 + d * 100 + a * 10 + b;
    int num4 = d * 1000 + a * 100 + b * 10 + c;
    return min({ num1, num2, num3, num4 });
}
void get_all_clock_num() {
    // finding all clock num
    for (int i = 1; i < 10; i++) {
        for (int j = 1; j < 10; j++) {
            for (int k = 1; k < 10; k++) {
                for (int l = 1; l < 10; l++) {
                    int clock = get_num(i, j, k, l);
                    if (visited[clock] == false) {
                        visited[clock] = true;
                    }
                }
            }
        }
    }
}
int main(void)
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    int input = get_num(a, b, c, d);

    get_all_clock_num();
    
    int sol = 0;
    for (int i = 1111; i <= input; i++) {
        if (visited[i] == true) sol++;
    }

    cout << sol;
    return 0;
}
반응형

'Computer Science&Engineering > 코딩테스트' 카테고리의 다른 글

[정올 2514] 문자열 찾기  (0) 2021.03.24
[정올 1516] 단어 세기  (0) 2021.03.24
[백준 2309] 일곱 난쟁이  (0) 2021.03.22
[백준 11004] K번째 수  (0) 2021.03.20
[백준 10825] 국영수 정렬문제  (0) 2021.03.20