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 |