백준 - 럭키 스트레이트
구해야 하는 것
- 주어진 숫자를 반으로 나눠서 왼쪽 부분 자릿수의 합과 오른쪽 부분 자릿수의 합이 동일한지 구하라
주어진 자료
- n의 자릿수는 항상 짝수 형태로만 주어진다.
- n의 자릿수를 반으로 나눴을 때 왼쪽 부분의 합과 오른쪽 부분의 합이 같으면 럭키 스트레이트를 사용할 수 있다.
조건
- 10 <= n <= 99,999,999
- 럭키 스트레이트를 사용할 수 있으면 LUCKY 출력, 그렇지 않으면 READY 출력
계획
- n을 String으로 바꾼다.
- 인덱스 0부터 문자열의 절반까지 숫자로 바꿔서 더한다.
- 문자열의 절반부터 끝까지 숫자로 바꿔서 더한다.
- 앞쪽 합과 뒤쪽 합이 같으면 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"; } } }