문제 링크 : https://www.acmicpc.net/problem/18406
18406번: 럭키 스트레이트
첫째 줄에 점수 N이 정수로 주어진다. (10 ≤ N ≤ 99,999,999) 단, 점수 N의 자릿수는 항상 짝수 형태로만 주어진다.
www.acmicpc.net
풀이 시간 : 20분
5명의 스터디원들과 풀이를 공유한 결과, 숫자를 입력받아 이를 문자로 변환하는 과정이 다양했다.
다양한 방법을 익혀두고, 나에게 편한 방법을 찾아봐야겠다.
1. 숫자 그대로 입력 받기
N = scanner.nextInt();
makeDigits(); // 자리수변환
int leftSum = 0;
int rightSum = 0;
int size = result.size();
for (int i = 0; i < size/2; i++) {
rightSum += result.get(i);
}
for (int i = size/2; i < size; i++) {
leftSum += result.get(i); // 나중에 더해지는 부분이 앞 자리수..
}
static void makeDigits() {
int num = N;
int remain;
while (true) {
remain = num % 10;
result.add(remain);
num = num / 10;
if(num < 10) {
result.add(num);
break;
}
}
}
2. 문자를 입력 받아, substring 으로 변환
String N = sc.next();
int count = N.length();
int number = count / 2;
String a = N.substring(0, number);
String b = N.substring(number, count);
int x = 0;
int y = 0;
for (int i = 0; i < a.length(); i++) {
x += a.charAt(i) - '0';
y += b.charAt(i) - '0';
}
3. 숫자로 입력 받아, String 으로 변환한 후 split처리
private static int n;
private static String[] arr;
public static void main(String[] args) {
input();
// n = 123402
int length = arr.length; // 6
int mid = length / 2; // 3
// 0, 1, 2
int first = IntStream.range(0, mid).map(i -> Integer.parseInt(arr[i])).sum();
// 3, 4, 5
int second = IntStream.range(mid, length).map(i -> Integer.parseInt(arr[i])).sum();
System.out.println(first == second ? "LUCKY" : "READY");
}
private static void input() {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
/* N은 항상 짝수임을 기억 */
arr = String.valueOf(n).split("");
}
4. nextLine 으로 입력 받아 split 하기
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;
}
}
}
5. character 에서 int value 바로 구하기
Scanner sc = new Scanner(System.in);
String N = sc.nextLine();
int standard = N.length()/2;
//왼쪽부분과 오른쪽 부분으로 분리
String left = N.substring(0,standard);
String right = N.substring(standard, N.length());
int leftTotal =0;
int rightTotal =0;
for(int i=0; i < standard;i++){
leftTotal += Character.getNumericValue(left.charAt(i));
rightTotal += Character.getNumericValue(right.charAt(i));
}