티스토리 뷰
2290번: LCD Test
첫째 줄에 두 개의 정수 s와 n이 들어온다. (1 ≤ s ≤ 10, 0 ≤ n ≤ 9,999,999,999)이다. n은 LCD 모니터에 나타내야 할 수 이며, s는 크기이다.
www.acmicpc.net
문제이해
해당 문제는 이해를 잘 하지 못해 검색을 통해 이해 했다.
처음에 주어진 S는 문자열 출력 횟수가 아닌 (s+2의 가로와 2s+3의 세로) 이 공식을 위한 수이다. 즉 이 수 만큼 가로 세로를 만들 어주기 만 하면 된다.
풀이
문제를 푸는 방식은 간단하다 S를 저장한 뒤 S를 (s+2의 가로와 2s+3의 세로) 이 공식에 맞추에 그려주기만 하면 된다.
우선 입력받은 문자열을 S와 N(lcd)로 구분한다.
N(lcd)에 들어올 값들을 하나씩 돌아가면서 그림을 그리면 된다.
그림을 그리는 방식은 코드를 참고하면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class test33 {
public static void main(String[] args) throws IOException {
// 문제 입력 시작
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
String S = st.nextToken();
int s = S.length();
char[][] ans = new char[2*n+3][(n+3)*s-1];
char[] lcd = new char[s];
for(int i=0; i<s; i++) {
lcd[i] = S.charAt(i);
}
// 정답을 공백으로 초기화
for(int i=0; i<2*n+3; i++) {
for(int j=0; j<(n+3)*s-1; j++) {
ans[i][j] = ' ';
}
}
// 문제 입력 끝
for(int i=0; i<s; i++) {
switch(lcd[i]) {
case '1':
for(int j=1; j<n+1; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=n+2; j<2*n+2; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
break;
case '2':
for(int j=1; j<n+1; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=n+2; j<2*n+2; j++) {
ans[j][(n+3)*i] = '|';
}
for(int j=1; j<n+1; j++) {
ans[0][(n+3)*i+j] = '-';
}
for(int j=1; j<n+1; j++) {
ans[n+1][(n+3)*i+j] = '-';
}
for(int j=1; j<n+1; j++) {
ans[2*n+2][(n+3)*i+j] = '-';
}
break;
case '3':
for(int j=1; j<n+1; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=n+2; j<2*n+2; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=1; j<n+1; j++) {
ans[0][(n+3)*i+j] = '-';
}
for(int j=1; j<n+1; j++) {
ans[n+1][(n+3)*i+j] = '-';
}
for(int j=1; j<n+1; j++) {
ans[2*n+2][(n+3)*i+j] = '-';
}
break;
case '4':
for(int j=1; j<n+1; j++) {
ans[j][(n+3)*i] = '|';
}
for(int j=1; j<n+1; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=n+2; j<2*n+2; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=1; j<n+1; j++) {
ans[n+1][(n+3)*i+j] = '-';
}
break;
case '5':
for(int j=1; j<n+1; j++) {
ans[j][(n+3)*i] = '|';
}
for(int j=n+2; j<2*n+2; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=1; j<n+1; j++) {
ans[0][(n+3)*i+j] = '-';
}
for(int j=1; j<n+1; j++) {
ans[n+1][(n+3)*i+j] = '-';
}
for(int j=1; j<n+1; j++) {
ans[2*n+2][(n+3)*i+j] = '-';
}
break;
case '6':
for(int j=1; j<n+1; j++) {
ans[j][(n+3)*i] = '|';
}
for(int j=n+2; j<2*n+2; j++) {
ans[j][(n+3)*i] = '|';
}
for(int j=n+2; j<2*n+2; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=1; j<n+1; j++) {
ans[0][(n+3)*i+j] = '-';
}
for(int j=1; j<n+1; j++) {
ans[n+1][(n+3)*i+j] = '-';
}
for(int j=1; j<n+1; j++) {
ans[2*n+2][(n+3)*i+j] = '-';
}
break;
case '7':
for(int j=1; j<n+1; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=n+2; j<2*n+2; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=1; j<n+1; j++) {
ans[0][(n+3)*i+j] = '-';
}
break;
case '8':
for(int j=1; j<n+1; j++) {
ans[j][(n+3)*i] = '|';
}
for(int j=1; j<n+1; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=n+2; j<2*n+2; j++) {
ans[j][(n+3)*i] = '|';
}
for(int j=n+2; j<2*n+2; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=1; j<n+1; j++) {
ans[0][(n+3)*i+j] = '-';
}
for(int j=1; j<n+1; j++) {
ans[n+1][(n+3)*i+j] = '-';
}
for(int j=1; j<n+1; j++) {
ans[2*n+2][(n+3)*i+j] = '-';
}
break;
case '9':
for(int j=1; j<n+1; j++) {
ans[j][(n+3)*i] = '|';
}
for(int j=1; j<n+1; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=n+2; j<2*n+2; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=1; j<n+1; j++) {
ans[0][(n+3)*i+j] = '-';
}
for(int j=1; j<n+1; j++) {
ans[n+1][(n+3)*i+j] = '-';
}
for(int j=1; j<n+1; j++) {
ans[2*n+2][(n+3)*i+j] = '-';
}
break;
case '0':
for(int j=1; j<n+1; j++) {
ans[j][(n+3)*i] = '|';
}
for(int j=1; j<n+1; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=n+2; j<2*n+2; j++) {
ans[j][(n+3)*i] = '|';
}
for(int j=n+2; j<2*n+2; j++) {
ans[j][(n+3)*i+n+1] = '|';
}
for(int j=1; j<n+1; j++) {
ans[0][(n+3)*i+j] = '-';
}
for(int j=1; j<n+1; j++) {
ans[2*n+2][(n+3)*i+j] = '-';
}
break;
}
}
//문자열 만들어서 출력
StringBuilder sb = new StringBuilder();
for(int i=0; i<2*n+3; i++) {
for(int j=0; j<(n+3)*s-1; j++) {
sb.append(ans[i][j]);
}
sb.append("\n");
}
System.out.println(sb);
}
}