[백준] 2622번: 삼각형만들기_java

응갱·2022년 10월 11일
0

백준

목록 보기
24/56
post-thumbnail

https://www.acmicpc.net/problem/2622

📎문제

같은 길이의 성냥개비가 여러 개 주어져 있다. 이것들을 평면에 늘어놓아서 삼각형을 만들려고 한다. 삼각형의 한 변은 여러 개의 성냥개비를 직선으로 이어서 만들 수 있지만, 성냥개비를 꺾거나 잘라서 변의 한 부분을 만들 수는 없다. 성냥개비의 개수가 주어졌을 때, 이들 성냥개비를 사용하여 만들 수 있든 서로 다른 삼각형의 개수를 구하는 프로그램을 작성하시오.

예를 들어서 9개의 성냥개비로 만들 수 있는 서로 다른 삼각형은 그림 1과 같이 3가지이다.

<주의사항>

  1. 주어진 성냥개비는 모두 사용하여 하나의 삼각형을 만들어야 한다.
  2. 삼각형을 한 개도 만들 수 없으면 0을 출력한다. 예를 들어서, 주어진 성냥개비의 수가 1, 2, 또는 4인 경우에는 삼각형을 한 개도 만들 수 없다.
  3. 합동인 삼각형들은 같은 삼각형으로 본다. 예를 들어서 성냥개비 5개를 사용하여 만들수 있는 그림 2의 삼각형들은 같은 삼각형으로 본다.

📎입력

첫째 줄에 성냥개비의 개수가 주어진다. 성냥개비의 개수는 1 이상 50,000 이하이다.

📎출력

첫째 줄에 만들 수 있는 삼각형의 개수를 출력한다.

📎코드

import java.util.Scanner;
// 자연수의 분할 P(N,3)
// 각 변의 길이를 a, b, c라 하고 a<b<c 일때, a+b>c 가 성립해야 삼각형이 만들어진다.
// a, b가 정해지면 c는 자동으로 정해진다.
//9=1+4+4=2+3+4=3+3+3
//8=2+3+3
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		
		int cnt=0;
		for(int a=1;a<=N/3;a++) {
			for(int b=a;b<=(N-a)/2;b++) {
				int c=N-a-b;
				if(b>c) break;
				
				if(c<a+b) {
					cnt++;
					
				}
				
			}
		}
		System.out.println(cnt);
		

	}

}

📎코드 설명

삼각형을 만드는 기본 조건을 활용한 코드이다.

  • 입력이 하나이기 때문에 Scanner를 사용하였다.
  • 각 변의 길이를 a, b, c라 하고 a<=b<=c 일때, a+b>c 가 성립해야 삼각형이 만들어진다.
  • a, b가 정해지면 c는 자동으로 정해진다.
  • 안쪽의 for문은 반복 횟수를 줄이기 위해 b<=(N-a)/2로 조건을 걸어주었다. b가 가장 커지는 경우가 위의 조건이기 때문이다.
profile
🥔 한 덩이

0개의 댓글