컴공댕이 공부일지
[c언어] 230310 백준 (10804 카드 역배치) 본문
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
'문제 풀이 > 코딩 문제 풀이 모음' 카테고리의 다른 글
[c언어] 백준 (1193 분수찾기) (0) | 2023.03.20 |
---|---|
[c언어] 백준 (2577 숫자의 개수 / 13909 창문 닫기 ) (0) | 2023.03.17 |
[c언어] 백준 (14916 거스름돈 / 11720번 숫자의 합 / 2851 슈퍼마리오) ★그리디 알고리즘 / 아스키코드 문자 연산 (0) | 2023.03.16 |
[c언어] 백준 (1292 쉽게 푸는 문제) 💥💦 (0) | 2023.03.13 |
[c언어] 백준 (25592 바둑돌 게임) (0) | 2023.03.09 |
Comments