[Baekjoon 18406번] 럭키 스트레이트 문제 (with 자바)

반응형
728x90
반응형

문제

https://www.acmicpc.net/problem/18406

 

18406번: 럭키 스트레이트

첫째 줄에 점수 N이 정수로 주어진다. (10 ≤ N ≤ 99,999,999) 단, 점수 N의 자릿수는 항상 짝수 형태로만 주어진다.

www.acmicpc.net

 

 

풀이코드

package com.algorithm._01_그리디_구현;

import java.util.Scanner;
import java.util.stream.IntStream;

/**
 * @Date 2022/07/05
 * @URL https://www.acmicpc.net/problem/18406
 */
public class A18406_럭키_스트레이트 {
    public static void main(String[] args) {
        A18406_럭키_스트레이트 main = new A18406_럭키_스트레이트();
        System.out.println(main.solution());
    }

    public String solution() {
        Scanner sc = new Scanner(System.in);
        String point = sc.next();

        int size = point.length();

        /* 왼쪽 합 */
        int leftSum = IntStream.range(0, size / 2)
                .map(i -> (int) point.charAt(i)).sum();

        /* 오른쪽 합 */
        int rightSum = IntStream.range(size / 2, size)
                .map(i -> (int) point.charAt(i)).sum();

        return leftSum == rightSum ? "LUCKY" : "READY";
    }
}

 

 

다른 풀이 보기

https://www.acmicpc.net/source/44864530

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String s = sc.nextLine();

        char[] arr = s.toCharArray();
        String result = "READY";
        int a = 0;
        int b = 0;
        for (int i = 0; i < arr.length / 2; i++) {
            a += arr[i] - '0';
            b += arr[arr.length - 1 - i] - '0';
        }
        if (a == b) {
            result = "LUCKY";
        }
        System.out.println(result);
    }
}

1) 한번의 반복문으로 왼쪽 합과 오른쪽 합을 동시에 구하는 로직이 인상적이다.

for (int i = 0; i < arr.length / 2; i++) {
    a += arr[i] - '0';
    b += arr[arr.length - 1 - i] - '0';
}
arr = [1, 2, 3, 4, 0, 2]

 

i = 0
  • a = 1 (arr[0]), b = 2 (arr[5])

첫번째 원소와 마지막 원소를 각 a, b 변수에 더한다.

이렇게 arr.length / 2 만큼 반복문을 수행하여 a는 왼쪽부터, b는 오른쪽부터 계산하여 한번에 구할 수 있다.

 

 

반응형

Designed by JB FACTORY