백준 좌석 배치도

KIMYEONGJUN·2025년 11월 26일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫 번째 줄에 영화를 예매한 손님 수 N이 주어진다. (1 ≤ N ≤ 200)
두 번째 줄부터 N줄 동안 각각의 손님이 예매한 좌석의 정보가 주어진다.

상영관의 좌석 배치도를 출력한다.
사람이 있는 좌석은 o, 없는 좌석은 .으로 표기한다.

내가 이 문제를 보고 생각해본 부분

BufferedReader 초기화:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
이 부분은 많은 입력 데이터를 효율적으로 읽어들이기 위해 BufferedReader를 사용하는 표준 방식이다.
손님 수 N 읽기:
int N = Integer.parseInt(br.readLine());
첫 번째 줄에서 예매한 손님 수 N을 읽어 정수로 변환한다.
좌석 배열 초기화:
char[][] seats = new char[10][20];: 10개의 행과 20개의 열을 가지는 2차원 char 배열을 선언한다. 
이 배열이 영화관의 좌석 배치도를 나타낼 거다.
이중 for 루프를 사용해 모든 좌석을 처음에는 비어있다는 의미인 .으로 채워준다.
예매 정보 처리:
N번 반복하면서 각 예매 정보를 처리한다.
String reservation = br.readLine();: "A10", "D4" 같은 예매 문자열을 읽어온다.
int row = reservation.charAt(0) - 'A';: 좌석의 열을 결정한다.
reservation.charAt(0): 예매 문자열의 첫 글자(예: 'A', 'D')를 가져온다.
- 'A': 이 문자를 ASCII 값으로 'A'의 ASCII 값을 빼주면, 'A'는 0, 'B'는 1, 'C'는 2... 이런 식으로 배열 인덱스에 맞는 정수 값을 얻을 수 있다. 
예를 들어, 'A' - 'A' = 0, 'B' - 'A' = 1이 된다.
int col = Integer.parseInt(reservation.substring(1)) - 1;: 좌석의 번호를 결정한다.
reservation.substring(1): 예매 문자열의 두 번째 문자부터 끝까지를 잘라낸다. 
예를 들어 "A10"에서는 "10"이, "D4"에서는 "4"가 된다.
Integer.parseInt(...): 잘라낸 문자열을 정수(예: 10, 4)로 변환한다.
- 1: 좌석 번호는 1부터 시작하지만, 배열 인덱스는 0부터 시작하므로 1을 빼준다. 
1번 좌석은 인덱스 0, 10번 좌석은 인덱스 9가 된다.
seats[row][col] = 'o';: 계산된 row와 col 위치에 해당하는 좌석에 손님이 있다는 의미로 'o'를 할당한다.
최종 좌석 배치도 출력:
다시 이중 for 루프를 사용해서 seats 배열의 내용을 순서대로 출력한다.
내부 루프에서는 각 좌석 문자( . 또는 o)를 출력하고, 외부 루프의 System.out.println()을 통해 한 행이 끝나면 줄 바꿈을 한다.
BufferedReader 닫기:
br.close();: 마지막으로 BufferedReader 자원을 닫아준다.

코드로 구현

package baekjoon.baekjoon_31;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// 백준 30889번 문제
public class Main1218 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 예매 손님 수 N을 읽습니다.
        int N = Integer.parseInt(br.readLine());

        // 10x20 크기의 좌석 배치도 배열을 선언하고 '.'으로 초기화합니다.
        char[][] seats = new char[10][20];
        for(int i = 0; i < 10; i++) {
            for(int j = 0; j < 20; j++) {
                seats[i][j] = '.';
            }
        }

        // N개의 예매 정보를 처리합니다.
        for(int k = 0; k < N; k++) {
            String reservation = br.readLine();

            // 좌석 정보에서 열(row)을 파싱합니다.
            // 'A'는 0, 'B'는 1 등으로 매핑합니다.
            int row = reservation.charAt(0) - 'A';

            // 좌석 정보에서 번호(column)를 파싱합니다.
            // 1번 좌석은 0, 2번 좌석은 1 등으로 매핑합니다.
            int col = Integer.parseInt(reservation.substring(1)) - 1;

            // 해당 좌석을 'o'로 표시합니다.
            seats[row][col] = 'o';
        }

        // 최종 좌석 배치도를 출력합니다.
        for(int i = 0; i < 10; i++) {
            for(int j = 0; j < 20; j++) {
                System.out.print(seats[i][j]);
            }
            System.out.println(); // 한 줄 출력 후 줄 바꿈
        }

        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글