티스토리 뷰

알고리즘

백준 2290

kOsari 2023. 6. 21. 10:29

2290번: LCD Test (acmicpc.net)

 

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);

    }
}

'알고리즘' 카테고리의 다른 글

백준 2232  (0) 2023.06.22
백준 1735  (0) 2023.06.22
백준 2089번  (0) 2023.06.21
백준 2075  (0) 2023.06.20
백준 2072  (0) 2023.06.20
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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
글 보관함