[BOJ 2290] LCD Test (Java)

nnm·2020년 2월 19일
0

BOJ 2290 LCD Test

문제풀이

이런 문제를 많이 풀어서 구현력을 높여야될거 같다.

  • 가로선을 그리는 함수와 세로선을 그리는 함수를 만들어서 각 숫자별 특징을 인자로 넘겨주고 그리게 하였다.
  • 코드가 썩 마음에 들지않는다..

구현코드

import java.util.Scanner;

public class Main {
	
	static StringBuilder lcd;
	static char[] numbers;
	static int overallV, overallH;
	static int size, length;
	
	public static void main(String[] args) {
		init();
		
		for(int i = 0 ; i < overallV ; ++i) {
			for(int j = 0 ;j < length ; ++j) {
				append(i, numbers[j]);
				lcd.append(" ");
			}
			lcd.append("\n");
		}
		
		System.out.println(lcd.toString());
	}
	
	private static void append(int height, char num) {
		switch(num) {
			case '0':
				if(height == 0) horizon(true);
				else if(height >= 1 && height <= size) vertical(true, true);
				else if(height == size + 1) horizon(false);
				else if(height > size + 1 && height <= size * 2 + 1) vertical(true, true);
				else horizon(true);
				break;
			case '1':
				if(height == 0) horizon(false);
				else if(height >= 1 && height <= size) vertical(false, true);
				else if(height == size + 1) horizon(false);
				else if(height > size + 1 && height <= size * 2 + 1) vertical(false, true);
				else horizon(false);
				break;
			case '2':
				if(height == 0) horizon(true);
				else if(height >= 1 && height <= size) vertical(false, true);
				else if(height == size + 1) horizon(true);
				else if(height > size + 1 && height <= size * 2 + 1) vertical(true, false);
				else horizon(true);
				break;
			case '3':
				if(height == 0) horizon(true);
				else if(height >= 1 && height <= size) vertical(false, true);
				else if(height == size + 1) horizon(true);
				else if(height > size + 1 && height <= size * 2 + 1) vertical(false, true);
				else horizon(true);
				break;
			case '4':
				if(height == 0) horizon(false);
				else if(height >= 1 && height <= size) vertical(true, true);
				else if(height == size + 1) horizon(true);
				else if(height > size + 1 && height <= size * 2 + 1) vertical(false, true);
				else horizon(false);
				break;
			case '5':
				if(height == 0) horizon(true);
				else if(height >= 1 && height <= size) vertical(true, false);
				else if(height == size + 1) horizon(true);
				else if(height > size + 1 && height <= size * 2 + 1) vertical(false, true);
				else horizon(true);
				break;
			case '6':
				if(height == 0) horizon(true);
				else if(height >= 1 && height <= size) vertical(true, false);
				else if(height == size + 1) horizon(true);
				else if(height > size + 1 && height <= size * 2 + 1) vertical(true, true);
				else horizon(true);
				break;
			case '7':
				if(height == 0) horizon(true);
				else if(height >= 1 && height <= size) vertical(false, true);
				else if(height == size + 1) horizon(false);
				else if(height > size + 1 && height <= size * 2 + 1) vertical(false, true);
				else horizon(false);
				break;
			case '8':
				if(height == 0) horizon(true);
				else if(height >= 1 && height <= size) vertical(true, true);
				else if(height == size + 1) horizon(true);
				else if(height > size + 1 && height <= size * 2 + 1) vertical(true, true);
				else horizon(true);
				break;
			case '9':
				if(height == 0) horizon(true);
				else if(height >= 1 && height <= size) vertical(true, true);
				else if(height == size + 1) horizon(true);
				else if(height > size + 1 && height <= size * 2 + 1) vertical(false, true);
				else horizon(true);
				break;
		}
	}
	
	private static void vertical(boolean left, boolean right) {
		if(left) {
			lcd.append("|");
		} else lcd.append(" ");
		for(int i = 0 ; i < size ; ++i) {
			lcd.append(" ");
		}
		if(right) {
			lcd.append("|");
		} else lcd.append(" ");
	}
	
	private static void horizon(boolean line) {
		if(line) {
			lcd.append(" ");
			for(int i = 0 ; i < size ; ++i) {
				lcd.append("-");
			}
			lcd.append(" ");
		} else {
			for(int i = 0 ; i < size + 2 ; ++i) {
				lcd.append(" ");
			}
		}
	}

	private static void init() {
		Scanner sc = new Scanner(System.in);
		
		size = sc.nextInt();
		numbers = sc.next().toCharArray();
		
		length = numbers.length;
		
		overallV = size * 2 + 3;
		overallH = ((size + 2) * length) + (length - 1);
		
		lcd = new StringBuilder();
	}
}
profile
그냥 개발자

0개의 댓글