[java][boj][b2] 8320. 직사각형을 만드는 방법
728x90
 

8320번: 직사각형을 만드는 방법

상근이는 변의 길이가 1인 정사각형 n개를 가지고 있다. 이 정사각형을 이용해서 만들 수 있는 직사각형의 개수는 총 몇 개일까? 두 직사각형 A와 B가 있을 때, A를 이동, 회전시켜서 B를 만들 수

www.acmicpc.net

문제

상근이는 변의 길이가 1인 정사각형 n개를 가지고 있다. 이 정사각형을 이용해서 만들 수 있는 직사각형의 개수는 총 몇 개일까?

두 직사각형 A와 B가 있을 때, A를 이동, 회전시켜서 B를 만들 수 없으면, 두 직사각형은 다르다고 한다. 직사각형을 만들 때, 정사각형을 변형시키거나, 한 정사각형 위에 다른 정사각형을 놓을 수 없다. 또, 직사각형은 정사각형으로 꽉 차있어야 한다.

입력

첫째 줄에 n (1 ≤ n ≤ 10,000)이 주어진다.

출력

만들 수 있는 직사각형의 개수를 출력한다.

풀이

/*
 * 입력
 * 1. 길이가 1인 정사각형 n개
 * 출력
 * 1. 만들 수 있는 직사각형의 개수
 * 
 * >> i와 j를 곱했을 때 n보다 크면 안 됨
 * >> boolean 양방향으로 체크
 */

머리가 안 돌아가서 boolean을 만들어 양방향으로 체크했다 j를 0부터 시작하지 않고 i부터 시작해서 조합처럼 풀면 더 간단하게 코드를 풀 수 있다

코드

package im형필수문제;

import java.io.*;
import java.util.*;

public class b2_8320_직사각형을만드는방법 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
		boolean[][] check = new boolean[n+1][n+1];
		
		int count = 0;
		
		for(int i = 1; i<=n; i++) {
			for(int j = 1; j<=n; j++) {
				//check가 false고 i와 j를 곱했을 때 n보다 크지 않으면
				if(!check[i][j] && i*j<=n) {
					//check 양방향 체크
					check[i][j] = check[j][i] = true;
					//개수 추가
					count++;
				}
			}
		}
		
		System.out.println(count);
		
	}

}

결과

 

#자바 #java #boj #백준 #알고리즘

728x90

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

[java][boj][s1] 2564. 경비원  (0) 2022.02.25
[java][boj][b2] 1592. 영식이와 친구들  (0) 2022.02.25
[java][boj][s3] 17413. 단어 뒤집기 2  (0) 2022.02.25
[java][boj][g5] 7569. 토마토  (0) 2022.02.24
[java][boj][g5] 7576. 토마토  (0) 2022.02.24