일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 대구고깃집
- 오라클
- 수성구데이트
- C#
- 압구정데이트
- 프로그래머스
- 수성못맛집
- 들안길삼겹살
- 앞산카페
- SQL
- 정렬
- 반복문
- BFS
- 백준
- 대구삼겹살
- 수성구맛집
- oracle
- 조건문
- 안지랑카페
- 범어동맛집
- 대구카페
- 대구데이트
- 수성못삼겹살
- 브루트 포스
- programmers
- 대구맛집
- 서울맛집
- 큐
- 대명동맛집
- 별찍기
- Today
- Total
모든 일상
[C# / 백준] 10804번 문제 - 카드 역배치 본문
문제
1부터 20까지 숫자가 하나씩 쓰인 20장의 카드가 아래 그림과 같이 오름차순으로 한 줄로 놓여있다. 각 카드의 위치는 카드 위에 적힌 숫자와 같이 1부터 20까지로 나타낸다.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | |
카드 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
이제 여러분은 다음과 같은 규칙으로 카드의 위치를 바꾼다: 구간 [a, b] (단, 1 ≤ a ≤ b ≤ 20)가 주어지면 위치 a부터 위치 b까지의 카드를 현재의 역순으로 놓는다.
예를 들어, 현재 카드가 놓인 순서가 위의 그림과 같고 구간이 [5, 10]으로 주어진다면, 위치 5부터 위치 10까지의 카드 5, 6, 7, 8, 9, 10을 역순으로 하여 10, 9, 8, 7, 6, 5로 놓는다. 이제 전체 카드가 놓인 순서는 아래 그림과 같다.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | |
카드 | 1 | 2 | 3 | 4 | 10 | 9 | 8 | 7 | 6 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
이 상태에서 구간 [9, 13]이 다시 주어진다면, 위치 9부터 위치 13까지의 카드 6, 5, 11, 12, 13을 역순으로 하여 13, 12, 11, 5, 6으로 놓는다. 이제 전체 카드가 놓인 순서는 아래 그림과 같다.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | |
카드 | 1 | 2 | 3 | 4 | 10 | 9 | 8 | 7 | 13 | 12 | 11 | 5 | 6 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
오름차순으로 한 줄로 놓여있는 20장의 카드에 대해 10개의 구간이 주어지면, 주어진 구간의 순서대로 위의 규칙에 따라 순서를 뒤집는 작업을 연속해서 처리한 뒤 마지막 카드들의 배치를 구하는 프로그램을 작성하시오.
입력
총 10개의 줄에 걸쳐 한 줄에 하나씩 10개의 구간이 주어진다. i번째 줄에는 i번째 구간의 시작 위치 ai와 끝 위치 bi가 차례대로 주어진다. 이때 두 값의 범위는 1 ≤ ai ≤ bi ≤ 20이다.
출력
1부터 20까지 오름차순으로 놓인 카드들에 대해, 입력으로 주어진 10개의 구간 순서대로 뒤집는 작업을 했을 때 마지막 카드들의 배치를 한 줄에 출력한다.
예제 입출력
소스코드
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.Eventing.Reader;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Web;
namespace ConsoleApplication1
{
class Program
{
public static void Main(string[] args)
{
int[] arr = new int[50];
for (int i = 1; i <= 20; i++)
{
arr[i] = i;
}
for(int i = 0; i<10; i++)
{
int[] input_num = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
for(int j = 0; j < (input_num[1] - input_num[0] +1) / 2; j++)
{ // 해당 범위를 반으로 나눈만큼 반복
int temp = arr[input_num[0]+j];
arr[input_num[0]+j] = arr[input_num[1] - j];
arr[input_num[1] - j] = temp;
}
}
for(int i = 1; i<=20; i++)
{
Console.Write(arr[i] + " ");
}
}
}
}
'코딩 공부 > C#' 카테고리의 다른 글
[C# / 백준] 11328번 strfry (0) | 2024.06.18 |
---|---|
[C# / 백준] 1406번 문제 에디터 (2) | 2024.06.18 |
[C# / 백준] 1267번 핸드폰 요금 (1) | 2024.06.13 |
[C# / 백준] 2309번 문제 일곱 난쟁이 (0) | 2024.06.12 |
[C# / 백준] 2446번 문제 별 찍기 - 9 (0) | 2024.06.10 |