본문 바로가기
카테고리 없음

구현 - 백준 18406 럭키 스트레이트

by SayHiWorld 2024. 9. 20.

#백준 18406

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

 

- 럭키 스트레이트라는 기술은 특정 조건을 만족할 때 사용할 수 있다.

 

- 캐릭터의 현재 점수를 N이라 한다.

 

- N을 자릿수 기준으로 반으로 나눈다.

 

- 왼쪽 부분의 각 자릿수 합과 오른쪽 부분의 각 자릿수 합이 동일하면, 기술 사용의 조건을 만족한다.

 

- 예시 점수 N = 123,402

 

- 기술 사용 조건을 만족한다면 "LUCKY"를 출력한다.

 

- 기술 사용 조건을 만족하지 않는다면 "READY"를 출력한다.

 

- N의 자릿수는 항상 짝수로 주어진다. 즉, 항상 반으로 나눌 수 있다.

 

입력

 

- 첫째 줄 :  123402

 

출력

 

- 첫째 줄 : LUCKY

 


 

접근 

 

- 럭키 스트레이트라는 기술은 특정 조건을 만족할 때 사용할 수 있다.

-> 점수를 main 함수에서 입력 받는다.

- 캐릭터의 현재 점수를 N이라 한다.

- N을 자릿수 기준으로 반으로 나눈다.

-> 입력 문자열을 정수 배열에 한자리씩 넣는다. 배열의 길이를 구한 후, 반씩 덧셈한다.

- 왼쪽 부분의 각 자릿수 합과 오른쪽 부분의 각 자릿수 합이 동일하면, 기술 사용의 조건을 만족한다.

-> 인덱스 [0]에서 인덱스[배열 길이의 절반-1] 까지 더한다. 인덱스 [배열길이의 절반]에서 인덱스[배열 길이]까지 더한다.

-> 두 값이 동일한지 비교한 후, 결과에 따라 출력을 달리한다. 

- 예시 점수 N = 123,402

- 기술 사용 조건을 만족한다면 "LUCKY"를 출력한다.

- 기술 사용 조건을 만족하지 않는다면 "READY"를 출력한다.

- N의 자릿수는 항상 짝수로 주어진다. 즉, 항상 반으로 나눌 수 있다.


의문점

 

입력된 N의 자릿수를 어떻게 구할 수 있지?

배열에 넣은 후, 배열 길이를 반환받으면 딱 N의 자릿수만큼 배열 길이가 나올까?

 

배열을 먼저 선언하지 않고, 수를 입력 받은 뒤 선언하면 된다.

1. 수 입력

2. 수 -> 문자열 변환 -> 길이 구하기

3. 구한 길이의 크기에 맞게 정수 배열 만들기

 

또는, 처음부터 정수를 문자열의 형태로 입력 받는 방법도 있다.

그러나 코드의 가독성을 위해 단계가 조금 더 많지만, 위의 방법을 택하도록 하겠다.

package week2.b18406;
import java.util.Scanner;

public class Main{
public static int n;
public static int length;
public static int leftSum=0;
public static int rightSum=0;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);

n=sc.nextInt();
String str = Integer.toString(n);
length=str.length();
int[] score=new int[length];

//str의 각 문자를 정수로 바꾸어 배열의 원소로 삽입
for (int i=0; i<length; i++){
score[i]=str.charAt(i)-'0';
}

for (int i=0; i<length/2;i++){
leftSum+=score[i];
rightSum+=score[i+length/2];
}

if(leftSum==rightSum){
System.out.println("LUCKY");
}
else{
System.out.println("READY");
}
sc.close();
}
}