럭키 스트레이트

구해야 하는 것

  • 주어진 숫자를 반으로 나눠서 왼쪽 부분 자릿수의 합과 오른쪽 부분 자릿수의 합이 동일한지 구하라

주어진 자료

  • n의 자릿수는 항상 짝수 형태로만 주어진다.
  • n의 자릿수를 반으로 나눴을 때 왼쪽 부분의 합과 오른쪽 부분의 합이 같으면 럭키 스트레이트를 사용할 수 있다.

조건

  • 10 <= n <= 99,999,999
  • 럭키 스트레이트를 사용할 수 있으면 LUCKY 출력, 그렇지 않으면 READY 출력

계획

  1. n을 String으로 바꾼다.
  2. 인덱스 0부터 문자열의 절반까지 숫자로 바꿔서 더한다.
  3. 문자열의 절반부터 끝까지 숫자로 바꿔서 더한다.
  4. 앞쪽 합과 뒤쪽 합이 같으면 LUCKY 출력, 다르면 READY 출력

실행

public class Main {
    public String solution(int n) {
        String num = String.valueOf(n); // n을 String으로 바꾼다
        int len = num.length();
        
        int left = 0; // 앞쪽 부분 합
        int right = 0; // 뒤쪽 부분 앞
        for(int i = 0; i < len / 2; i++) {
            left += num.charAt(i) - 48;
        }
        for(int i = len / 2; i < len; i++) {
            right += num.charAt(i) - 48;
        }
        
        if(left == right) {
            return "LUCKY";
        } else {
            return "READY";
        }
    }
}

반성

  • 숫자를 문자열로 바꾸지 않고 숫자의 맨 끝자리부터 더해나가는 방식으로도 풀 수 있겠다.
    public class Main {
      public String solution(int n) {
          int len = (int)(Math.log10(n)+1); // 숫자 길이 알아내기
            
          int left = 0;
          int right = 0;
          for(int i = 0; i < len; i++) {
              if(i < len / 2) { // 맨 끝에서부터 중간까지의 자릿수는 right에 더함
                  right += n % 10;
              } else { // 중간부터 맨 앞까지의 자릿수는 left에 더함
                  left += n % 10;
              }
              n /= 10;
          }
    
          if(left == right) {
              return "LUCKY";
          } else {
              return "READY";
          }
      }
    }