[JAVA] 백준 10단계

2024. 11. 12. 10:29코딩 테스트(Coding Test)/백준

27323 직사각형

나의 답) 100ms

import java.io.*;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int A = Integer.parseInt(br.readLine());
        int B = Integer.parseInt(br.readLine());
        
        System.out.print((A * B));
    }
}

1085 직사각형에서 탈출

나의 답1) 104ms

import java.io.*;
import java.util.StringTokenizer;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        int x = Integer.parseInt(st.nextToken());
        int y = Integer.parseInt(st.nextToken());
        int w = Integer.parseInt(st.nextToken());
        int h = Integer.parseInt(st.nextToken());
        
        int left = x;
        int right = w - x;
        int bottom = y;
        int top = h - y;
        
        int ans = Math.min(Math.min(left, right), Math.min(top, bottom));
        System.out.print(ans);
    }
}

 

나의 답2) 104ms

import java.io.*;
import java.util.StringTokenizer;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        int x = Integer.parseInt(st.nextToken());
        int y = Integer.parseInt(st.nextToken());
        int w = Integer.parseInt(st.nextToken());
        int h = Integer.parseInt(st.nextToken());
        
        int left = x;
        int right = w - x;
        int bottom = y;
        int top = h - y;
        
        System.out.print(Math.min(Math.min(left, right), Math.min(top, bottom)));
    }
}

 

다른 사람의 답) 104ms

import java.io.*;
import java.util.StringTokenizer;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        int x = Integer.parseInt(st.nextToken());
        int y = Integer.parseInt(st.nextToken());
        int w = Integer.parseInt(st.nextToken());
        int h = Integer.parseInt(st.nextToken());
        int[] dis = new int[3];
        int min = x;
        
        w -= x;
        h -= y;
        
        dis[0] = y;
        dis[1] = w;
        dis[2] = h;
        
        for (int i = 0; i < 3; i++) {
            if (dis[i] < min) min = dis[i];
        }
        
        System.out.print(min);
    }
}

3009 네 번째 점

나의 답) 120ms

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

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        
        int x = 0, y = 0;
        
        for (int i = 0; i < 3; i++) {
            st = new StringTokenizer(br.readLine());
            x ^= Integer.parseInt(st.nextToken());
            y ^= Integer.parseInt(st.nextToken());
        }
        
        System.out.print(x + " " + y);
    }
}

15894 수학은 체육과목 입니다

나의 답) 100ms

import java.io.*;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        long n = Integer.parseInt(br.readLine());
        
        System.out.print(4 * n);
    }
}

 

다른 사람의 답1) 104ms

import java.io.*;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        long n = Long.parseLong(br.readLine());
        
        System.out.print(4 * n);
    }
}

9063 대지

나의 답) 248ms

import java.io.*;
import java.util.StringTokenizer;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        
        int n = Integer.parseInt(br.readLine());
        int minX = Integer.MAX_VALUE, minY = Integer.MAX_VALUE;
        int maxX = Integer.MIN_VALUE, maxY = Integer.MIN_VALUE;
        
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());
            
            if (x < minX) minX = x;
            if (x > maxX) maxX = x;
            
            if (y < minY) minY = y;
            if (y > maxY) maxY = y;
        }
        System.out.print((maxX - minX) * (maxY - minY));
    }
}

 

10101 삼각형 외우기

나의 답) 104ms

import java.io.*;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] arr = new int[3];
        int total = 0;
        
        for (int i = 0; i < 3; i++) {
            arr[i] = Integer.parseInt(br.readLine());
            total += arr[i];
        }
        if (total != 180) System.out.print("Error");
        else if (arr[0] == arr[1] && arr[0] == arr[2]) System.out.print("Equilateral");
        else if (arr[0] == arr[1] || arr[1] == arr[2] || arr[2] == arr[0]) System.out.print("Isosceles");
        else System.out.print("Scalene");
    }
}

5073 삼각형과 세 변

나의 답) 96ms

import java.io.*;
import java.util.StringTokenizer;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int x = 1, y = 1, z = 1;
        
        while (true) {
            st = new StringTokenizer(br.readLine());
            x = Integer.parseInt(st.nextToken());
            y = Integer.parseInt(st.nextToken());
            z = Integer.parseInt(st.nextToken());
            
            if (x == 0 && y == 0 && z == 0) break;

            if (x + y <= z || y + z <= x || x + z <= y) {
                System.out.println("Invalid");
            } else if (x == y && y == z) {
                System.out.println("Equilateral");
            } else if (x == y || y == z || x == z) {
                System.out.println("Isosceles");
            } else {
                System.out.println("Scalene");
            }
        }
    }
}

 

다른 사람의 답1) 104ms

import java.io.*;
import java.util.StringTokenizer;
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 + y + z) - Math.max(x, Math.max(y, z) * 2) > 0) {
                if (x == y && y == z) System.out.println("Equilateral");
                else if (x != y && y != z && z != x) System.out.println("Scalene");
                else System.out.println("Isosceles");
            } else System.out.println("Invalid");
        }
    }
}

 

다른 사람의 답2) 100ms

import java.io.*;
import java.util.*;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();
        
        while (true) {
            st = new StringTokenizer(br.readLine());
            int[] triangles = new int[3];
            for (int i = 0; i < 3; i++) {
                triangles[i] = Integer.parseInt(st.nextToken());
            }
            if (triangles[0] == 0) break;
            
            Arrays.sort(triangles);
            if (triangles[0] + triangles[1] <= triangles[2]) sb.append("Invalid");
            else {
                if (triangles[0] == triangles[1] && triangles[1] == triangles[2]) sb.append("Equilateral");
                else if (triangles[0] == triangles[1] || triangles[1] == triangles[2]) sb.append("Isosceles");
                else sb.append("Scalene");
            }
            sb.append("\n");
        }
        System.out.print(sb);
    }
}

14215 세 막대

나의 답) 104ms

import java.io.*;
import java.util.*;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());
        
        System.out.print(maxTriangle(a, b, c));
    }
    public static int maxTriangle(int a, int b, int c) {
    int[] sides = {a, b, c};
    Arrays.sort(sides);
    
    if (sides[0] + sides[1] > sides[2]) return sides[0] + sides[1] + sides[2];
    else {
        sides[2] = sides[0] + sides[1] - 1;
        return sides[0] + sides[1] + sides[2];
    }
}
}

문제 풀이 접근

  1. 삼각형 조건 적용: 삼각형을 만들기 위해서는 아래와 같은 조건을 만족해야 합니다:
    • a + b > c
    • a + c > b
    • b + c > a
  2. 둘레를 최대로 만들기:
    • 만약 주어진 a, b, c가 삼각형을 만드는 조건을 만족하지 않는다면, 가장 긴 막대의 길이를 줄여서 조건을 만족할 때까지 줄여야 합니다.
    • 예를 들어, a <= b <= c라고 가정했을 때, a + b > c를 만족하지 않으면 c를 a + b - 1로 줄여야 조건을 만족할 수 있습니다.
  3. 알고리즘:
    1. 입력받은 세 수를 크기 순서대로 정렬합니다.
    2. 만약 가장 긴 변 <= 나머지 두 변의 합이라면 삼각형을 만들 수 있는 상태이므로 둘레를 출력합니다.
    3. 그렇지 않다면 가장 긴 변을 나머지 두 변의 합 - 1로 줄여서 조건을 만족하게 만든 후 둘레를 구합니다.

다른 사람의 답) 100ms

import java.io.*;
import java.util.*;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());
        int s = 0;
        
        if ( a == b && b == c && c == a ) s = a + b + c;
        else if ( a + b <= c ) {
            c = a + b - 1;
            s = a + b + c;
        }
        else if ( a + c <= b ) {
            b = a + c - 1;
            s = a + b + c;
        }
        else if ( b + c <= a ) {
            a = b + c - 1;
            s = a + b + c;
        }
        else s = a + b + c;

        System.out.print(s);
    }
}

'코딩 테스트(Coding Test) > 백준' 카테고리의 다른 글

[JAVA] 백준 13단계  (0) 2024.11.24
[JAVA] 백준 7단계  (0) 2024.09.10
[JAVA] 백준 6단계  (1) 2024.09.09
[JAVA] 백준 5단계  (3) 2024.09.09
[JAVA] 백준 4단계  (0) 2024.09.05