작성일 :

문제 링크

17013번 - Flipper

설명

가로/세로 뒤집기 명령이 주어질 때 최종 2x2 숫자 배치를 출력하는 문제입니다.


접근법

먼저 가로와 세로 뒤집기의 횟수는 홀짝만 의미가 있음을 이용합니다.

다음으로 가로 뒤집기는 위아래 행을 맞바꾸고, 세로 뒤집기는 좌우 열을 맞바꿉니다.

이후 두 동작을 홀짝 여부에 맞게 적용합니다.

마지막으로 완성된 2x2 배치를 출력합니다.



Code

C#

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
using System;

class Program {
  static void Main() {
    var s = Console.ReadLine()!;
    var h = false;
    var v = false;
    for (var i = 0; i < s.Length; i++) {
      if (s[i] == 'H') h = !h;
      else v = !v;
    }

    var a = 1; var b = 2; var c = 3; var d = 4;
    if (h) {
      var t = a; a = c; c = t;
      t = b; b = d; d = t;
    }
    if (v) {
      var t = a; a = b; b = t;
      t = c; c = d; d = t;
    }

    Console.WriteLine($"{a} {b}");
    Console.WriteLine($"{c} {d}");
  }
}

C++

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
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  string s; cin >> s;
  bool h = false;
  bool v = false;
  for (char ch : s) {
    if (ch == 'H') h = !h;
    else v = !v;
  }

  int a = 1, b = 2, c = 3, d = 4;
  if (h) {
    int t = a; a = c; c = t;
    t = b; b = d; d = t;
  }
  if (v) {
    int t = a; a = b; b = t;
    t = c; c = d; d = t;
  }

  cout << a << " " << b << "\n";
  cout << c << " " << d << "\n";
  return 0;
}