문제 풀이/기타

[백준] 4153 (직각삼각형)

interfacer_han 2023. 11. 30. 12:47

#1 알고리즘

 

선택 정렬 (Selection Sort)

#1 알고리즘 #2 요약 (자바) public static void selectionSort(int[] array, int startIndex, int endIndex) { for(int maxIndex = endIndex; startIndex < maxIndex; maxIndex--) { // 배열을 순회하며 가장 값이 큰 원소의 index를 구한다 int

kenel.tistory.com

코드 중에 선택 정렬의 원리를 살짝 응용한 부분이 있다. 선택 정렬은 알고리즘이 매우 간단하기 때문에, 가벼운 정렬 문제에 사용하기에 안성맞춤이다.

 

#2 코드

#2-1 자바

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        exam4153(sc);
        sc.close();
    }
    
    private static void exam4153(Scanner sc) {
        String[] linesStr = sc.nextLine().trim().split(" ");
        int[] lines = new int[3];            
        for(int i = 0; i < 3; i++) {
            lines[i] = Integer.parseInt(linesStr[i]);
        }
        
        if(lines[0] == 0) {
            return;
            
        } else {
            // 선택 정렬 알고리즘의 원리를 살짝 응용
            int longest = 0;
            for(int i = 1; i < 3; i++) {
                if(lines[longest] < lines[i]) {
                    longest = i;
                }
            }
            // lines[longest]의 값을 배열의 맨 뒤와 교환
            int temp = lines[2];
            lines[2] = lines[longest];
            lines[longest] = temp;
            
            if(lines[0] * lines[0] + lines[1] * lines[1] == lines[2] * lines[2]) {
                System.out.println("right");
            } else {
                System.out.println("wrong");                
            }
            
            exam4153(sc);
        }
    }
}

코틀린에서와는 달리, main()가 아니라 exam4153()를 재귀 호출한다. 처음 선언한 Scanner 객체를 유일하게 유지하기 위함이다.

 

#2-2 코틀린

fun main() {
    val linesStr = readln()!!.trim().split(" ")
    val lines : Array<Int> = Array(3) { 0 }
    for(i : Int in 0..2) {
        lines[i] = linesStr[i].toInt()
    }
    
    if(lines[0] == 0) {
        return
        
    } else {
        // 선택 정렬 알고리즘의 원리를 살짝 응용
        var longest = 0       
        for(i : Int in 1..2) {
            if(lines[longest] < lines[i]) {
                longest = i
            }
        }
        // lines[longest]의 값을 배열의 맨 뒤와 교환
        val temp = lines[2]
        lines[2] = lines[longest]
        lines[longest] = temp
        
        if(lines[0] * lines[0] + lines[1] * lines[1] == lines[2] * lines[2]) {
            println("right")
        } else {
            println("wrong")
        }
        
        main()
    }
}

'문제 풀이 > 기타' 카테고리의 다른 글

[백준] 2839 (설탕 배달)  (0) 2023.12.04
[백준] 9076 (점수 집계)  (0) 2023.12.02
[백준] 8958 (OX퀴즈)  (0) 2023.11.27
[백준] 10818 (최소, 최대)  (0) 2023.11.24
[백준] 10250 (ACM 호텔)  (0) 2023.11.23