코딩테스트 (C#)

백준 10811 : 바구니 뒤집기 - C# 풀이

UniCoti-sub 2024. 9. 13.
반응형

문제 사진

 

이번 문제도 이해하기는 쉽다.

예를 들어 1 4가 주어지면, 1부터 4까지의 값을 뒤집으면 된다.

 

[1,2,3,4,5] 가 있는데 "1 3"이 입력된다면

[3,2,1,4,5]로 바꾸라는 뜻으로 이해하면 된다.

첫 줄에는 n과 m이 주어지는데, n은 바구니(배열)의 개수,

m은 뒤집을 횟수이다.

 

따라서 먼저 n과 m을 받아준 후 

m번 반복하면서 특정 위치를 뒤집어주고

출력해주면 성공하는 문제이다.

using System;
using System.Linq;

namespace unicoti {
    class Program {
        static void Main(string[] args) {
            string[] input = (Console.ReadLine() ?? "").Split(' ');
            int.TryParse(input[0], out int n);
            int.TryParse(input[1], out int m);
            
            int[] arr = new int[n];
            for(int k = 0; k < n; k++) {
                arr[k] = k+1;
            }
            
            for (int i = 0; i < m; i++) {
                string[] caseInput = (Console.ReadLine() ?? "").Split(' ');
                int.TryParse(caseInput[0], out int a);
                int.TryParse(caseInput[1], out int b);

                var result = arr.Take(a - 1)
                          .Concat(arr.Skip(a - 1).Take(b - a + 1).Reverse())
                          .Concat(arr.Skip(b));
                arr = result.ToArray();
            }

            for (int j = 0; j < arr.Length; j++) {
                Console.WriteLine(arr[j]);
            }
        }
    }
}

 

이번 코드는 좀 길기도 하다.

물론 for문을 나름대로 몇번 줄인 결과이기도 하다.

처음에 n과 m을 입력받고 배열을 각 숫자로 초기화한다.

 

이후 m번 만큼 반복 실행을 해주고 Linq의

Take, Skip, Concat, Reverse까지 4개나 사용해서

for문 없이 뒤집기에 성공했다.

 

이후 arr에 저장해주고 출력해줘서 성공했다.

Take, Skip, Concat, Reverse는 따로 글로 제작하여 올리겠다.

Linq가 확실히 많이 공부해야 하는 것 같다.


오늘의 느낀점)

이번 문제에서 어떻게든 Linq를 쓰려 하니 새로 알게 된 메소드들이 많았다.

Take, Skip, Concat, Reverse가 그 대상인데 기능이 참 활용도가 높아서 좋았다.

이걸 지금까지 왜 몰랐는지 모르겠다만 제대로 공부해서 익히고 싶어졌다.

 

이런 기술들은 따로 메인 블로그에 정리하여 올리면 좋을 것 같다.

글이 올라오면 이 글에도 첨부 해놔야겠다.

반응형

댓글