tgool
Tgool
tgool
전체 방문자
오늘
어제
  • 분류 전체보기
    • Data Science
      • AI
      • Data Mining
      • ML(Machine Learning)
    • Computer Science
      • 자료구조
      • 알고리즘
      • 시스템 프로그래밍
      • 운영체제
      • 컴퓨터 구조
      • 컴퓨터 네트워크
      • 데이터 베이스
      • 파이썬
      • 자바
      • 아두이노
    • Math
      • 통계학
      • 확률론
      • 선형대수학
      • 수리통계학
      • 회귀분석
    • TOFEL
    • Git
    • Plan
    • Book
    • Working out
      • 영양과 생활
      • 운동 정보
      • 운동 기록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
tgool
Computer Science/알고리즘

[백준] 1652번: 누울 자리를 찾아라_JAVA

[백준] 1652번: 누울 자리를 찾아라_JAVA
Computer Science/알고리즘

[백준] 1652번: 누울 자리를 찾아라_JAVA

2023. 1. 25. 16:15

문제 (https://www.acmicpc.net/problem/1652)

 

문제

일 년 동안 세계일주를 하던 영식이는 여행을 하다 너무 피곤해서 근처에 있는 코레스코 콘도에서 하룻밤 잠을 자기로 하고 방을 잡았다.

코레스코 콘도에 있는 방은 NxN의 정사각형모양으로 생겼다. 방 안에는 옮길 수 없는 짐들이 이것저것 많이 있어서 영식이의 누울 자리를 차지하고 있었다. 영식이는 이 열악한 환경에서 누울 수 있는 자리를 찾아야 한다. 영식이가 누울 수 있는 자리에는 조건이 있다. 똑바로 연속해서 2칸 이상의 빈 칸이 존재하면 그 곳에 몸을 양 옆으로 쭉 뻗으면서 누울 수 있다. 가로로 누울 수도 있고 세로로 누울 수도 있다. 누울 때는 무조건 몸을 쭉 뻗기 때문에 반드시 벽이나 짐에 닿게 된다. (중간에 어정쩡하게 눕는 경우가 없다.)

만약 방의 구조가 위의 그림처럼 생겼다면, 가로로 누울 수 있는 자리는 5개이고, 세로로 누울 수 있는 자리는 4개 이다. 방의 크기 N과 방의 구조가 주어졌을 때, 가로로 누울 수 있는 자리와 세로로 누울 수 있는 자리의 수를 구하는 프로그램을 작성하시오.

 

 

입력

첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다.

 

출력

첫째 줄에 가로로 누울 수 있는 자리와 세로로 누울 수 있는 자리의 개수를 출력한다.

예제 입력 1

5
....X
..XX.
.....
.XX..
X....

예제 출력 1

5 4

풀이

- 문제에서 주어진 방의 크기 N과 방의 상태(문자열 배열)을 입력 받는다. 

 

- 가로 또는 세로로 누울 수 있다. (대각선으로는 누울 수 없다)

 

- 행 또는 열이 2칸 이상 연속으로 빈 곳(하얀색)이 존재하면 그 곳에 누울 수 있다.

 

- 눕게 되는 행 또는 열의 2칸 이상 연속되는 부분을 모두 사용하게 됨(문제에서 누울 때는 몸을 쭉 뻗기 때문에~ 조건)

 

- 반복문을 이용해서 가로 또는 세로가 2칸 이상 연속으로 비어있는지 체크

(벽이나 장애물을 만나기 전까지 '.'(빈 공간)을 2개 이상 만나는 지 정수형 변수를 이용해서 체크)

 

- 벽(배열의 마지막 인덱스, j ==  n-1), 'X'(장애물)이다. 

 

- 코딩으로 빙고판을 만들어 본 사람은 쉽게 풀 수 있을 것.

 


코드

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt(); //맵의 크기

		char[][] map = new char[n][n];
		int hor = 0; //가로 개수
		int ver = 0; //세로 개수



		//문제 입력.
		for(int i=0; i<n; i++) {
			String s = scan.next();
			for(int j=0; j<n; j++) {
				map[i][j] = s.charAt(j);
			}
		}
		//가로, 세로 방향으로 누울 수 있는지 여부
		for(int i=0; i<n; i++) {
			int temp_h = 0, temp_v = 0; //가로, 세로 연속으로 빈 공간인지 확인하기 위한 변수
			for(int j=0; j<n; j++) {
				//가로 체크
				if(map[i][j] == '.') 
					temp_h++;
				if(map[i][j] == 'X' || (j == n-1)) {
					if(temp_h >= 2) { 
						hor++;
					}
					temp_h = 0;
				}

				//세로 체크
				if(map[j][i] == '.') 
					temp_v++;
				if(map[j][i] == 'X' || (j == n-1)) {
					if(temp_v >= 2) 
						ver++;
					temp_v = 0;
				}
			}
		}

		System.out.println(hor + " " + ver);
		scan.close();
	}

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

[백준] 4963번: 섬의 개수_JAVA  (0) 2023.02.13
[백준] 1182번: 부분수열의 합_JAVA  (0) 2023.02.06
[백준] 1018번: 체스판 다시 칠하기_JAVA  (0) 2023.02.06
[백준] 9251번: LCS_JAVA  (0) 2023.01.25
[백준] 5525번: IOIOI_JAVA  (0) 2023.01.25
    'Computer Science/알고리즘' 카테고리의 다른 글
    • [백준] 1182번: 부분수열의 합_JAVA
    • [백준] 1018번: 체스판 다시 칠하기_JAVA
    • [백준] 9251번: LCS_JAVA
    • [백준] 5525번: IOIOI_JAVA
    tgool
    tgool

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.