문제 링크입니다: https://www.acmicpc.net/problem/2290
2290번: LCD Test
문제 지민이는 새로운 컴퓨터를 샀다. 하지만 새로운 컴퓨터에 사은품으로 온 LC-디스플레이 모니터가 잘 안나오는 것이다. 지민이의 친한 친구인 지환이는 지민이의 새로운 모니터를 위해 테스트 할 수 있는 프로그램을 만들기로 하였다. 입력 첫째 줄에 두 개의 정수 s와 n이 들어온다. (1 ≤ s ≤ 10, 0 ≤ n ≤ 9,999,999,999)이다. n은 LCD 모니터에 나타내야 할 수 이며, s는 크기이다. 출력 길이가 s인 '-'와 '|'를 이용해서
www.acmicpc.net
처음에는 이차원 배열을 선언하여 표시하려고 했지만 n이 최대 9,999,999,999이기 때문에 이는 불가능했습니다.
따라서, 한 줄 한 줄 출력해줘야하는데 이를 위해 저는 출력하는 부분을 5파트로 나누었습니다.
1. 맨 윗줄
2. 몸통 위쪽
3. 가운데 줄
4. 몸통 아래쪽
5. 맨 아랫줄
1, 3, 5는 각각 한 줄이며, 2와 4는 각각 s줄입니다.
또한, 모든 숫자의 가로 길이는 s + 2이기 때문에 이를 잘 이용하면 쉽게 구현할 수 있는 문제였습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <string> | |
using namespace std; | |
int main(void) | |
{ | |
ios_base::sync_with_stdio(0); | |
cin.tie(0); | |
int s; | |
string n; | |
cin >> s >> n; | |
for (int h = 0; h < 2 * s + 3; h++) | |
{ | |
for (int i = 0; i < n.length(); i++) | |
{ | |
//제일 위 줄 | |
if (h == 0) | |
{ | |
if (n[i] == '0' || n[i] == '2' || n[i] == '3' || n[i] == '5' || n[i] == '6' || n[i] == '7' || n[i] == '8' || n[i] == '9') | |
{ | |
cout << " "; | |
for (int j = 0; j < s; j++) | |
cout << "-"; | |
cout << " "; | |
} | |
else | |
{ | |
for (int j = 0; j < s + 2; j++) | |
cout << " "; | |
} | |
} | |
//몸통 위쪽 | |
else if (1 <= h && h <= s) | |
{ | |
if (n[i] == '0' || n[i] == '4' || n[i] == '8' || n[i] == '9') | |
{ | |
cout << "|"; | |
for (int j = 0; j < s; j++) | |
cout << " "; | |
cout << "|"; | |
} | |
else if (n[i] == '1' || n[i] == '2' || n[i] == '3' || n[i] == '7') | |
{ | |
for (int j = 0; j < s + 1; j++) | |
cout << " "; | |
cout << "|"; | |
} | |
else | |
{ | |
cout << "|"; | |
for (int j = 0; j < s + 1; j++) | |
cout << " "; | |
} | |
} | |
//가운데 | |
else if (h == s + 1) | |
{ | |
if (n[i] == '0' || n[i] == '1' || n[i] == '7') | |
{ | |
for (int j = 0; j < s + 2; j++) | |
cout << " "; | |
} | |
else | |
{ | |
cout << " "; | |
for (int j = 0; j < s; j++) | |
cout << "-"; | |
cout << " "; | |
} | |
} | |
//몸통 아래쪽 | |
else if (s + 2 <= h && h <= 2 * s + 1) | |
{ | |
if (n[i] == '0' || n[i] == '6' || n[i] == '8') | |
{ | |
cout << "|"; | |
for (int j = 0; j < s; j++) | |
cout << " "; | |
cout << "|"; | |
} | |
else if (n[i] == '1' || n[i] == '3' || n[i] == '4' || n[i] == '5' || n[i] == '7' || n[i] == '9') | |
{ | |
for (int j = 0; j < s + 1; j++) | |
cout << " "; | |
cout << "|"; | |
} | |
else | |
{ | |
cout << "|"; | |
for (int j = 0; j < s + 1; j++) | |
cout << " "; | |
} | |
} | |
//맨 아랫줄 | |
else | |
{ | |
if (n[i] == '1' || n[i] == '4' || n[i] == '7') | |
{ | |
for (int j = 0; j < s + 2; j++) | |
cout << " "; | |
} | |
else | |
{ | |
cout << " "; | |
for (int j = 0; j < s; j++) | |
cout << "-"; | |
cout << " "; | |
} | |
} | |
cout << " "; | |
} | |
cout << "\n"; | |
} | |
return 0; | |
} |


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
백준 4574번 스도미노쿠 (0) | 2019.05.03 |
---|---|
백준 3568번 iSharp (0) | 2019.05.02 |
백준 3190번 뱀 (5) | 2019.05.01 |
백준 14499번 주사위 굴리기 (0) | 2019.04.30 |
백준 5373번 큐빙 (0) | 2019.04.29 |