[백준 11586] 지영 공주님의 마법 거울 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
입력된 여러 줄의 문자열을 거울에 비친 방식에 따라 출력 형식을 조정하는 문제입니다.
- 전체 문자열은 여러 줄로 이루어져 있으며, 각 줄은 고정된 길이를 갖습니다.
- 마지막 입력으로 주어지는 숫자에 따라 출력 방향이 결정됩니다.
1
: 변형 없이 그대로 출력합니다.2
: 좌/우 반전하여 출력합니다.3
: 상/하 반전하여 출력합니다.
접근법
- 먼저 출력할 줄 수를 입력받고, 해당 줄 수만큼 문자열을 순서대로 저장합니다.
-
이후 입력된 출력 방식에 따라 다음과 같이 처리합니다:
1
이 입력된 경우, 저장한 줄들을 입력받은 순서대로 그대로 출력합니다.2
인 경우, 각 줄의 문자를 오른쪽에서 왼쪽 순으로 바꿔 출력합니다.3
인 경우, 전체 줄의 순서를 마지막 줄부터 처음 줄까지 거꾸로 출력합니다.
- 각 처리 방식은 입력받은 줄 수 또는 한 줄의 길이에 비례하는 횟수만큼 반복되므로,
전체 시간 복잡도는O(n × m)
수준입니다.(n
: 줄 수,m
: 각 줄의 길이)
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Collections.Generic;
using System.Linq;
class Program {
static void Main() {
int n = int.Parse(Console.ReadLine());
var lines = new List<string>();
for (int i = 0; i < n; i++) lines.Add(Console.ReadLine());
int mode = int.Parse(Console.ReadLine());
if (mode == 1) {
foreach (var line in lines) Console.WriteLine(line);
} else if (mode == 2) {
foreach (var line in lines)
Console.WriteLine(new string(line.Reverse().ToArray()));
} else {
for (int i = lines.Count - 1; i >= 0; i--)
Console.WriteLine(lines[i]);
}
}
}
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
#include <bits/stdc++.h>
using namespace std;
typedef vector<string> vs;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
vs mirror(n);
for (auto &s : mirror) cin >> s;
int k; cin >> k;
if (k == 1) {
for (auto &s : mirror) cout << s << '\n';
} else if (k == 2) {
for (auto &s : mirror)
cout << string(s.rbegin(), s.rend()) << '\n';
} else {
for (int i = n - 1; i >= 0; i--) cout << mirror[i] << '\n';
}
return 0;
}