컴공댕이 공부일지

[c언어] 230310 백준 (10804 카드 역배치) 본문

문제 풀이/코딩 문제 풀이 모음

[c언어] 230310 백준 (10804 카드 역배치)

은솜솜솜 2023. 3. 10. 16:18
728x90

공강시간에 소융창 칭구들과 깔짝깔짝 풀어보기...ㅎㅅㅎ

 

 

1. 10804 카드 역배치

브론즈 2

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

 

10804번: 카드 역배치

1부터 20까지 오름차순으로 놓인 카드들에 대해, 입력으로 주어진 10개의 구간 순서대로 뒤집는 작업을 했을 때 마지막 카드들의 배치를 한 줄에 출력한다. 

www.acmicpc.net

 

 

#include <stdio.h>

int main()
{
    
    int arr[20];
    int a=0; //구간 시작
    int b=0; //구간 끝
    int l=0; //구간 길이
    int x=0;
    int temp=0; //바꿀 때 쓸 빈공간.

    for(int i=0; i<20; i++) {
        arr[i]=i+1;
    }

    for(int i=0; i<10; i++) {
        scanf("%d %d", &a, &b);
        
        l=b+1-a;
        
        if(l%2==0) { //바꿔야하는 구간 내 수가 짝수
            x=(l+1)/2;
        } else { //바꿔야하는 구간 내 수가 홀수
            x=l/2;
        }
        
        while(x>0) {
                
            temp=arr[a-1];
            arr[a-1]=arr[b-1];
            arr[b-1]=temp;
                
            x--;
            a++;
            b--;
        }
         
    }
        
        
    
    for(int i=0; i<20; i++) {
        printf("%d ", arr[i]);
    }
    

    return 0;
}

 

숫자들로 예제를 몇 개 만들어보고 규칙 찾아 코드 작성했다.

구간 내 숫자가 짝수, 홀수인 경우로 나누고, 배열 값들을 swap했다.

 

arr[a-1], arr[a], arr[a+1] --- 와

arr[b-1], arr[b-2], arr[b-3] --- 을 바꿔야한다.

 

숫자를 직접 넣어보며 풀이한 필기.아래 빨간 글씨가 찾아낸 규칙.

 

728x90
Comments