Algorithms/문제 풀이

[BOJ 18406] 럭키 스트레이트

DeJa 2021. 12. 16. 01:23
728x90

럭키 스트레이트

BOJ 18406 : 럭키 스트레이트

구현

public class Main {

    private static String N;
    private static int left = 0;
    private static int right = 0;

    public static void main(String[] args) {
        input();
        solution();
    }

    private static void input() {
        Scanner sc = new Scanner(System.in);
        N = sc.nextLine();
    }

    private static void solution() {
        String[] numbers = N.split("");
        int middle = numbers.length / 2;
        for (int i = 0; i < numbers.length; i++) {
            int number = Integer.parseInt(numbers[i]);
            if (i < middle) {
                left += number;
            } else {
                right += number;
            }
        }

        if(left == right) {
            System.out.println("LUCKY");
        } else {
            System.out.println("READY");
        }
    }
}

substring 을 이용할 수도 있다.

int middle = N.length() / 2;

String leftArea = N.substring(0, middle);
String rightArea = N.substring(middle);

int left = 0;
int right = 0;

for (int i = 0; i < a.length(); i++) {
    // char 값을 int 로 변환하기 위해 '0' 을 빼준다.
    left += leftArea.charAt(i) - '0'; 
    right += rightArea.charAt(i) - '0';
}

문자를 숫자로 변환하기 위해 아스키 코드값을 빼는 것보다 Character.getNumericValue(char) 를 써주는 것이 가독성 측면에서는 더 좋아보인다.

Character.getNumericValue(leftArea.charAt(i));
Character.getNumericValue(rightArea.charAt(i));

또는 람다를 활용할 수있다.

String[] numbers = N.split("");
int middle = N.length() / 2;
int left = IntStream.range(0, middle).map(i -> Integer.parseInt(numbers[i])).sum();
int right = IntStream.range(middle, N.length()).map(i -> Integer.parseInt(numbers[i])).sum();
728x90