본문 바로가기

Algorithm/CodeUp

[CodeUp_Java] Q1679 : 세모바퀴 만들기

반응형

안녕하세요! Plitche(플리체)입니다.
이번 포스팅의 주제는 Q1679 세모바퀴 만들기 (자바, JAVA)입니다.

Intro

Question

문제 설명

입력

철심의 길이 n이 입력된다.(3≤n≤50)

출력

1) 만들 수 있는 세모바퀴의 형태를 모두 출력한다. 이 때 세 변의 길이를 공백으로 분리해서 출력한다.
2) 단, 모든 길이는 자연수이며, 철심의 일부를 자를 수 없다.
3) 한 세모바퀴에 대해서는 각 변의 길이가 짧은 것으로부터 긴 것 순으로 출력한다.
4) 각 세모바퀴는 짧은 변의 길이가 짧은 것으로부터 긴 것 순으로 출력한다.
5) 가장 짧은 변의 길이가 같으면, 그 다음 긴 변들을 기준으로 4)를 적용한다.

예시

  • 입력 : 9
  • 출력 :
    1 4 4
    2 3 4
    3 3 3

Solution (풀이)

  • 풀이 : 메모리 11180, 시간 : 94
public class Answer1 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int length = Integer.parseInt(br.readLine());

        int count = 0;
        for (int i=1; i<=length-2; i++) { // i == 1번 변
            for (int j=1; j<=length-1-i; j++) { // j == 2번 변
                int c = length-i-j; // c == 3번 변
                // 1. 짧은 두 변의 합이 가장 긴 변의 합보다 작아야 한다.
                // 2. 순차적으로 크기 비교 (가장 짧은 변 <= 중간 길이 <= 가장 긴 변)
                if (i+j>c && i<=j && j<=c) {
                    sb.append(i + " ").append(j + " ").append(c).append("\n");
                    count++;
                }
            }
        }

        // 3항 연산자 이용 : 위의 조건을 일치하는 갯수가 1개 이상일 때 출력
        System.out.println(count > 0 ? sb : -1);
    }

}

Ranking(순위)

반응형