나를 기록하다
article thumbnail
반응형

백준(baekjoon) 4153번 직각삼각형


문제 설명

직각삼각형이 되기 위한 조건은 주어진 세 변의 길이가 각각 x, y, z이고, 가장 큰 변의 길이를 x라고 했을 때,

x^2 = y^2 + z^2(피타고라스 공식)이 성립하는 것이다.

Scanner 대신 효율적인 방법을 풀어보기 위해 BufferedReader와 StringBuilder를 활용하였다.


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class Main {
	public static void main(String[] args) throws IOException {
    
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        StringBuilder sb = new StringBuilder();
        
        while(true) {
            StringTokenizer st = new StringTokenizer(br.readLine()," ");
            
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());
            int z = Integer.parseInt(st.nextToken());
            
            if(x == 0 && y == 0 && z== 0) break;
            
            if((x * x + y * y) == z * z) {
                sb.append("right").append('\n');
            } else if((z * z + y * y) == x * x) {
                sb.append("right").append('\n');
            } else if((x * x + z * z) == y * y) {
                sb.append("right").append('\n');
            } else {
                sb.append("wrong").append('\n');
            }
        }
        System.out.println(sb);        
    }   
}

풀이과정

  1. 이전 문제와 마찬가지로 BufferedReader를 통해 입력값을 문자열로 받는다.
  2. StringBuilder 객체를 생성한다.
  3. while문 내부에 StringTokenizer 객체를 생성하고 BufferedReader 객체를 통해 입력받은 문자열을 " "을 기준으로 분리한다.
  4. nextToken을 통해 x,y,z에 분리된 토큰을 순서대로 넣는다.
  5. x,y,z가 모두 0이면 프로그램을 종료한다.
  6. 그 외에는 피타고라스의 법칙을 만족하는 경우 StringBuilder 객체에 right를 추가하고 '\n'을 입력해 다음 줄로 넘기고 아닌 경우 wrong을 추가한다.
  7. while문을 탈출하면 StringBuilder 객체에 저장된 문자열을 출력한다.

 

처음 학습한 개념인 StringBuilder에 대해서는 아래에 정리해두겠다.

 

 


StringBuilder란 무엇인가

  1. 설명: Java에서 제공하는 문자열을 효율적으로 조작할 수 있게 해주는 클래스
  2. 특징
    1. 가변성(mutable): 한 번 생성된 StringBuilder 객체 내부 문자열을 변경할 수 있다. 이 특성은 String과는 대조적인데,
      String 객체는 불변(immutable)이기 때문에 문자열이 변경될 때마다 새로운 String 객체를 생성해야 한다.
    2. 효율성(efficiency): 문자열을 변경하거나 추가할 때 매우 효율적. 문자열 연산이 빈번한 경우 성능 향상
  3. 사용방법
StringBuilder sb = new StringBuilder(); // StringBuilder 객체 생성
sb.append("안녕하세요, "); // 문자열 추가
sb.append("저는 Java를 잘 다룹니다."); // 문자열 추가
System.out.println(sb.toString()); // StringBuilder의 내용을 출력

위의 코드에서처럼, StringBuilder 객체를 생성한 뒤에 append 메소드를 사용하여 문자열을 추가할 수 있다. toString 메소드를 사용하면 StringBuilder 객체에 저장된 문자열을 String 형태로 변환하여 사용할 수 있다.

그 외에도 StringBuilder 클래스는 문자열을 삭제(delete), 교체(replace), 뒤집기(reverse) 등의 다양한 메소드를 제공한다.


 

반응형
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...