ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 2947번 : 나무조각 (C 언어)
    c c++ 언어 공부 2023. 6. 1. 15:03

    https://www.acmicpc.net/problem/2947

     

    2947번: 나무 조각

    첫째 줄에 조각에 쓰여 있는 수가 순서대로 주어진다. 숫자는 1보다 크거나 같고, 5보다 작거나 같으며, 중복되지 않는다. 처음 순서는 1, 2, 3, 4, 5가 아니다.

    www.acmicpc.net

    Code:

    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
    #include <stdio.h>
     
    int main()
    {
        int arr[5= { 0, };
        int temp = 0;
        int flag = 0;
        int count = 0;
        int state = 0;
        int check = 0;
        for (int i = 0; i < 5; i++)
        {
            scanf("%d"&arr[i]);
        }
        while (1)
        {
            count = 0;
            check = 0;
            if (state==0 && arr[0> arr[1])
            {
                temp = arr[0];
                arr[0= arr[1];
                arr[1= temp;
                check = 1;
            }
            if (state == 1 && arr[1> arr[2])
            {
                temp = arr[1];
                arr[1= arr[2];
                arr[2= temp;
                check = 1;
            }
            if (state == 2 && arr[2> arr[3])
            {
                temp = arr[2];
                arr[2= arr[3];
                arr[3= temp;
                check = 1;
            }
            if (state == 3 && arr[3> arr[4])
            {
                temp = arr[3];
                arr[3= arr[4];
                arr[4= temp;
                check = 1;
            }
            state++;
            if (check == 1)
            {
                for (int i = 0; i < 5; i++)
                {
                    printf("%d ", arr[i]);
                    if ((i + 1== arr[i])
                    {
                        count++;
                    }
                }
                printf("\n");
            }
            if (state == 5)
            {
                state = 0;
            }
            if (count == 5)
            {
                flag = 1;
            }
            if (flag == 1)
            {
                break;
            }
        }
    }
    cs

    문제풀이:

    1. 각 단계별로 돌아야 하므로 state라는 변수를 설정하였다.

    2. if조건문에 들어가면 check라는 변수를 1로 바꾸어 변화한 배열을 출력하였다.

    3. 배열을 출력할 때 1,2,3,4,5가 들어오는지 count로 체크함

    4. state가 5가되면 다시 0으로 바꾸고, count가 5가 되면 1,2,3,4,5가 들어온것이므로 flag를 1로 flag가 1이면 break를 해주었다.

     

Designed by Tistory.