반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


1. [SW expert Academy] SWEA 11457번 gravity 자바(Java)

1) 난이도 : D3

 

2) 문제번호 : 11457번

 

3) 문제 출처

swexpertacademy.com/main/learn/course/subjectDetail.do?subjectId=AV10CSr6ABUCFAY2

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

2. 문제

상자들이 쌓여있는 방이 있다. 방이 오른쪽으로 90도 회전하여 상자들이 중력의 영향을 받아 낙하한다고 할 때, 낙차가 가장 큰 상자를 구하여 그 낙차를 출력하시오.

총 26개의 상자가 회전한 후, A 상자는 7, B의 상자는 6, C의 상자의 낙차는 1이 된다.

3. 제약사항

 

4. 입력

테스트 케이스,행의 수,상자의 높이

 

5. 출력

최대 낙차 값을 출력

 

6. 풀이

- 배열을 완전 탐색하면서 상자가 있는 경우(1)에는 그 밑의 배열들을 탐색하여 0의 갯수를 세어 준다.

- 0의 갯수는 낙차가 되기 때문이다.

7. 소스 코드

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt(); //테스트 케이스의 갯수
		
		for(int tc=1; tc<=T;tc++) {
			//크기
			int N = sc.nextInt();
			
			//최댓값 변수
			int Max = 0;
			//1차원배열 선언
			int[] input = new int[N];
			
			//2차원배열 선언
			int[][] arr = new int[N][N];
			
			//arr를 완전탐색해서 0의 갯수를 구해 결과값을 저장하는 배열
			int[][] result = new int[N][N];
			
			//각 행에 높이를 입력받음
			for(int i=0;i<N;i++) input[i] = sc.nextInt();
			
			//높이만큼 배열에 1 저장
			for(int i=0;i<N;i++) {
				for(int j=0;j<input[i];j++) {
					arr[i][j] = 1;
				}
			}
			
			//행
			for(int i=0;i<N;i++) {
				//열
				for(int j=0;j<N;j++) {
					//현재 위치의 값이 1이라면
					if(arr[i][j]==1){
						int count = 0; //0의 갯수를 count하기 위한 변수
						//k는 i+1행(아래행)부터 N까지 
						for(int k=i+1;k<N;k++) {
							//아래 행의 값이 0이라면 count 1씩 증가
							if(arr[k][j]==0) count++;
						}
						//그 결과를 result 배열에 입력
						result[i][j] = count;
						Max = Math.max(count, Max);
					}
				}
			}
			
			//높이만큼 입력받은 배열 출력
			System.out.println("이건 높이만큼 입력받은 배열");
			for(int i=0;i<N;i++) {
				for(int j=0;j<N;j++) {
					System.out.print(arr[i][j]);
				}
				System.out.println();
			}
			
			System.out.println("----------------------");
			//이건 결과를 저장한 result 배열
			System.out.println("이건 결과를 저장한 result 배열");
			for(int i=0;i<N;i++) {
				for(int j=0;j<N;j++) {
					System.out.print(result[i][j]);
				}
				System.out.println();
			}
			System.out.println();
			
			//최댓값 출력
			System.out.println(Max);
		}
	}
}

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기