정코딩
Home
  • 분류 전체보기 (421)
    • 알고리즘 (382)
      • Baekjoon (301)
      • SW Academy (39)
      • JUNGOL (7)
      • 프로그래머스 (33)
    • CS (4)
      • 알고리즘 (1)
    • 공부 (19)
      • JAVA (6)
      • BackEnd (4)
      • FrontEnd (3)
      • 프로젝트 (6)
    • 일상 (16)
      • 기타 (16)
Home
  • 분류 전체보기 (421)
    • 알고리즘 (382)
      • Baekjoon (301)
      • SW Academy (39)
      • JUNGOL (7)
      • 프로그래머스 (33)
    • CS (4)
      • 알고리즘 (1)
    • 공부 (19)
      • JAVA (6)
      • BackEnd (4)
      • FrontEnd (3)
      • 프로젝트 (6)
    • 일상 (16)
      • 기타 (16)
블로그 내 검색
Portfolio

정코딩

동의대학교 컴퓨터공학과 SSAFY 6기

  • 알고리즘/Baekjoon

    Baekjoon 2799 블라인드 JAVA

    2022. 7. 27.

    by. soonil

     

    2799번: 블라인드

    첫째 줄에 M과 N이 공백으로 구분해서 주어진다. (1 ≤ M, N ≤ 100) 다음 줄에는 현재 건너편 아파트의 상태가 주어진다. 모든 창문은 문제 설명에 나온 것 처럼 4*4 그리드로 주어진다. 또, 창문과

    www.acmicpc.net

    문제

    봄이 오고 있다. 해는 높이 떠서 환하게 빛나고 있다. 사람들은 햇볕을 가리기 위해 블라인드를 내린다.

    상근이는 이웃들이 무엇을 하는지를 염탐하고, 이것에 대해서 뒷담화를 하는 주부이다. 올해는 건너편 아파트에 사는 사람들이 블라인드를 얼마나 내리는지를 조사하려고 한다. 

    모든 창문은 4×4 그리드로 나타낼 수 있고, *를 이용해서 블라인드를 나타낸다. 상근이가 볼 수 있는 창문은 다음 5가지 상태 중 하나이다.

    건너편 아파트의 한 층에는 N개의 창문이 있고, 총 M층 건물이다. 현재 건너편 아파트의 창문 상태가 주어졌을 때, 위의 5가지 상태가 각각 몇 번 나오는지 구하는 프로그램을 작성하시오.

     

    조건

    [입력]

    첫째 줄에 M과 N이 공백으로 구분해서 주어진다. (1 ≤ M, N ≤ 100)

    다음 줄에는 현재 건너편 아파트의 상태가 주어진다. 모든 창문은 문제 설명에 나온 것 처럼 4*4 그리드로 주어진다. 또, 창문과 창문은 '#'를 이용해서 구분한다. 예제 입력 형식을 참고하면 좋다. 아파트의 정보는 5M+1줄, 각 줄은 5N+1개 글자로 이루어져 있다.

     

    [출력]

    출력은 총 5개 숫자이다. 문제 설명에 나온 순서대로 각 블라인드 타입이 몇 개 있는지를 출력한다. 숫자를 모두 합하면 M*N이 되어야 한다.

     

    풀이

    해당 문제는 창문에 상태가 주어졌을 때 블라인드 타입의 숫자를 구하는 문제다.

    처음 블라인드에 정보를 map에 입력받아 주었고 이후 반복문을 통해 블라인드 시작점을 체크하여 증가시키는 방식으로 해결했다.

    로직은 아래와 같다.

     

    1. 입력 처리를 한다.

    2. map에 블라인드 정보를 담는다.

    3. 2중 포문을 통해서 블라인드를 탐색한다. 시작 (1,1)

        1. 현재 좌표에서 아래로 4칸만큼 *의 개수를 체크한다.

        2. *의 개수만큼 해당하는 배열의 값을 증가시킨다.

    4. 배열 값을 하나씩 출력한다.

     

    코드
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    public class Main {
        public static void main(String[] args) throws Exception{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken());
            int M = Integer.parseInt(st.nextToken());
    
            char map[][] = new char[N*5+1][M*5+1];
            int ans[] = new int[5];
            for (int i = 0; i < N*5; i++) {
                map[i] = br.readLine().toCharArray();
            }
    
            for (int i = 1; i <= N*5; i = i + 5) {
                for (int j = 1; j <= M*5 ; j = j + 5) {
                    int cnt = 0;
                    for (int k = 0; k < 4; k++) {
                        if(map[i+k][j] =='*')
                            cnt++;
                        else
                            break;;
                    }
                    ans[cnt]++;
                }
            }
            for (int i = 0; i < 5; i++) {
                System.out.print(ans[i]+" ");
            }
        }
    }
     

    GitHub - JUNGSOONIL/Algorithm-JAVA: 알고리즘 문제 해결 자바 소스 코드

    알고리즘 문제 해결 자바 소스 코드. Contribute to JUNGSOONIL/Algorithm-JAVA development by creating an account on GitHub.

    github.com

     

    728x90

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

    Baekjoon 2075 N번째 큰 수 JAVA  (0) 2022.07.29
    Baekjoon 7569 토마토 JAVA  (0) 2022.07.27
    Baekjoon 16165 걸그룹 마스터 준석이 JAVA  (0) 2022.07.22
    Baekjoon 11660 구간 합 구하기 5 JAVA  (0) 2022.07.21
    Baekjoon 17836 공주님을 구해라! JAVA  (0) 2022.07.19

    댓글

    관련글

    • Baekjoon 2075 N번째 큰 수 JAVA 2022.07.29
    • Baekjoon 7569 토마토 JAVA 2022.07.27
    • Baekjoon 16165 걸그룹 마스터 준석이 JAVA 2022.07.22
    • Baekjoon 11660 구간 합 구하기 5 JAVA 2022.07.21
    맨 위로
전체 글 보기
  • Baekjoon
  • Solved
  • Github
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Designed by Nana
블로그 이미지
soonil

티스토리툴바