티스토리 뷰

Algorithm

[백준] S2 2290 LCD Test (java)

코딩브론즈 2020. 12. 20. 15:00

www.acmicpc.net/problem/2290

 

2290번: LCD Test

첫째 줄에 두 개의 정수 s와 n이 들어온다. (1 ≤ s ≤ 10, 0 ≤ n ≤ 9,999,999,999)이다. n은 LCD 모니터에 나타내야 할 수 이며, s는 크기이다.

www.acmicpc.net

 

풀이

 

1) 2*s+2 만큼의 StringBuffer 배열을 만듬

2) 각 숫자가나올때마다 배열을 채워넣음

3) 경우의 수는 한정적이다

3-1) 상, 중상, 중, 중하, 하 로 나눈다.

4) 케이스에 맞는 함수를 만들어서 상황에 맞게 쓴다

 

 

주의사항

 

1) 맨 처음 시작할때 공백은 넣지 않는다

2) 숫자 사이에는 공백이 존재한다.

 

package com.baekJoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.StringTokenizer;

public class BJ_S2_2290_LCDTest {
	static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
	static StringTokenizer tokens;
	static int s;
	static String num;
	static StringBuffer sb[];
	public static void main(String[] args) throws NumberFormatException, IOException {
		input = new BufferedReader(new StringReader(src));
		tokens = new StringTokenizer(input.readLine());
		s = Integer.parseInt(tokens.nextToken());
		num = tokens.nextToken();
		sb = new StringBuffer[2*s+3];
		int size = num.length();
		for(int i=0; i<2*s+3; i++) {
			sb[i] = new StringBuffer();
		}
		
		for(int i=0; i<size; i++) {
			switch (num.charAt(i)) {
			case '1':
				sang1();
				jungSang2();
				jung1();
				jungHa2();
				ha1();
				break;
			case '2':
				sang2();
				jungSang2();
				jung2();
				jungHa1();
				ha2();
				break;
			case '3':
				sang2();
				jungSang2();
				jung2();
				jungHa2();
				ha2();
				break;
			case '4':
				sang1();
				jungSang3();
				jung2();
				jungHa2();
				ha1();
				break;
			case '5':
				sang2();
				jungSang1();
				jung2();
				jungHa2();
				ha2();
				break;
			case '6':
				sang2();
				jungSang1();
				jung2();
				jungHa3();
				ha2();
				break;
			case '7':
				sang2();
				jungSang2();
				jung1();
				jungHa2();
				ha1();
				break;
			case '8':
				sang2();
				jungSang3();
				jung2();
				jungHa3();
				ha2();
				break;
			case '9':
				sang2();
				jungSang3();
				jung2();
				jungHa2();
				ha2();
				break;
			case '0':
				sang2();
				jungSang3();
				jung1();
				jungHa3();
				ha2();
				break;
			}
			for(int z=0; z<sb.length; z++) {
				sb[z].append(' ');
			}
		}
		for(int i=0; i<sb.length; i++) {
			System.out.println(sb[i]);
		}
	}
	
	static void sang1(){
		for(int i=0; i<s+2; i++) { // 맨 윗라인 없음
			sb[0].append(' ');
		}
	}
	
	static void sang2(){
		sb[0].append(' '); // 맨 윗라인 있음
		for(int j=0; j<s; j++) {
			sb[0].append('-');
		}
		sb[0].append(' ');
	}
	
	static void jungSang1() { // 중상 라인 왼쪽 
		for(int j=1; j<1+s; j++) { 
			sb[j].append('|');
			for(int k=0; k<s+1; k++) {
				sb[j].append(' ');
			}
		}
	}
	
	static void jungSang2() { // 중상 라인 오른쪽 
		for(int j=1; j<1+s; j++) { 
			for(int k=0; k<s+1; k++) {
				sb[j].append(' ');
			}
			sb[j].append('|');
		}
	}
	
	static void jungSang3() { // 중상 라인 양쪽 
		for(int j=1; j<1+s; j++) { 
			sb[j].append('|');
			for(int k=0; k<s; k++) {
				sb[j].append(' ');
			}
			sb[j].append('|');
		}
	}
	
	static void jung1() {  // 중 라인 없음
		for(int i=0; i<s+2; i++) {
			sb[1+s].append(' ');
		}
	}
	
	
	static void jung2() {  // 중 라인 있음
		sb[1+s].append(' ');
		for(int i=0; i<s; i++) { 
			sb[1+s].append('-');
		}
		sb[1+s].append(' ');
	}
	
	static void jungHa1() { // 중하 라인 왼쪽
		for(int j=2+s; j<2*s+2; j++) {
			sb[j].append('|');
			for(int k=0; k<s+1; k++) {
				sb[j].append(' ');
			}
		}
	}
	
	static void jungHa2() { // 중하 라인 오른쪽
		for(int j=2+s; j<2*s+2; j++) {
			for(int k=0; k<s+1; k++) {
				sb[j].append(' ');
			}
			sb[j].append('|');
		}
	}
	
	static void jungHa3() { // 중하 라인 양쪽
		for(int j=2+s; j<2*s+2; j++) {
			sb[j].append('|');
			for(int k=0; k<s; k++) {
				sb[j].append(' ');
			}
			sb[j].append('|');
		}
	}
	
	static void ha1() {  // 맨 아래 라인 없음
		for(int j=0; j<s+2; j++) {
			sb[2*s+2].append(' ');
		}
	}
	
	static void ha2() {  // 맨 아래 라인 있음
		sb[2+2*s].append(' ');
		for(int j=0; j<s; j++) { 
			sb[2+2*s].append('-');
		}
		sb[2+2*s].append(' ');
	}
	static String src =
			"3 1234567890";
}

 

 

후기

 

멍청하게 하나하나 구현하다가 함수로풀면 편하다는 것을 깨닫고 다시 짰다.

퍼즐을 맞추는 듯한 기분이드는 문제였다. 쏠쏠한 재미를 느낄 수 있는 문제.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 30 31
글 보관함