[백준 문제 풀이] 14215번 세 막대

Junu Kim·2025년 12월 18일
post-thumbnail

[14215] 세 막대

난이도: ★☆☆☆☆ • solved on: 2025-12-18


문제 요약

  • 문제 유형: 구현, 정렬
  • 요구사항: 세 막대로 삼각형이 되도록 만들 때, 가능한 최대 둘레를 출력해야 한다.

사용 개념

  1. 자료구조

    • int[] : 세 막대 길이 저장
  2. 알고리즘/기법

    • 정렬(Arrays.sort)
    • 삼각형 성립 조건(가장 긴 변 < 나머지 두 변의 합)
  3. 핵심 키워드

    • triangle inequality(삼각부등식), maximum perimeter(최대 둘레)

풀이 아이디어

  1. 문제 분해
  • 세 값 정렬 후 sticks[2](최대) 기준으로 삼각형 성립 여부를 검사한다.
  1. 핵심 로직 흐름

    sort(sticks)
    if max < sum(two small):
        answer = a+b+c
    else:
        max를 (sum(two small) - 1)로 줄이면 삼각형 성립
        answer = (two small) + (sum(two small) - 1) = 2*sum(two small) - 1
  2. 예외 처리

    • 이미 삼각형이면 그대로 합 출력
    • 아니면 가장 긴 변만 줄여서 최대 둘레를 만든다.

코드

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

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = br.readLine();

        StringTokenizer st = new StringTokenizer(line);
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());

        int[] sticks = {a,b,c};
        Arrays.sort(sticks);

        if(sticks[2] < sticks[0] + sticks[1]){
            System.out.println(Arrays.stream(sticks).sum());
            return;
        }

        System.out.println(2*(sticks[0] + sticks[1])-1);
    }
}

시간·공간 복잡도

  • 시간 복잡도: O(1)
  • 공간 복잡도: O(1)

어려웠던 점

  • 딱히 없었음

배운 점 및 팁

  1. StringTokenizer의 역할과 원리
    StringTokenizer(String str), StringTokenizer(String str, String delim)
  1. Integer.parseInt()Integer.valueOf() 차이
  • Integer.parseInt()
    • 리턴 타입 : int (Primitive)
      - 불필요한 박싱/언박싱을 피할 수 있다
    • 제네릭 컬렉션(List<Integer>)에 넣으려면 결국 오토박싱이 발생함
  • Integer.valueOf()
    • 리턴 타입 : Integer (Wrapper 객체, Reference variable)
    • Wrapper 생성/언박싱 등 부가 비용이 생길 수 있다.

참고 및 링크


추가 연습 문제


profile
생각이 현실이 될 수 있도록 노력하는 중입니다.

0개의 댓글