# 문제
- 주소: https://www.acmicpc.net/problem/2588
- 세 자리 수 x 세 자리 수의 계산 과정 값과 최종 값 출력하기.
# 코드
- Scanner, BufferedReader + InputStreamReader 사용
▼ Scanner 사용 - 1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
String strB = String.valueOf(B);
String[] arrB = strB.split("");
int sum1 = A * Integer.parseInt(arrB[2]);
int sum2 = A * Integer.parseInt(arrB[1]);
int sum3 = A * Integer.parseInt(arrB[0]);
int sum4 = sum1 + (sum2 * 10) + (sum3 * 100);
System.out.println(sum1);
System.out.println(sum2);
System.out.println(sum3);
System.out.println(sum4);
}
}
▼ Scanner 사용 - 2
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String A = sc.nextLine();
String B = sc.nextLine();
char[] charB = B.toCharArray();
int numA = Integer.parseInt(A);
int sum1 = numA * (charB[2] - '0');
int sum2 = numA * (charB[1] - '0');
int sum3 = numA * (charB[0] - '0');
int sum4 = sum1 + (sum2 * 10) + (sum3 * 100);
System.out.println(sum1);
System.out.println(sum2);
System.out.println(sum3);
System.out.println(sum4);
}
}
▼ BufferedReader + InputStreamReader 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int A = Integer.parseInt(br.readLine());
int B = Integer.parseInt(br.readLine());
int lenB = String.valueOf(B).length();
int sum = A * B;
int[] arrLen = new int[lenB];
for (int i = 0; i < lenB; i++) {
int result = B % 10;
arrLen[i] = result;
B = B / 10;
System.out.println(arrLen[i] * A);
}
System.out.println(sum);
}
}
# 입/출력 결과
▼ Scanner 사용 - 1
▼ Scanner 사용 - 2
▼ BufferedReader + InputStreamReader 사용
# 과정
- 첫 번째, 두 번째는 Scanner 클래스 사용해서 문제를 풀었다.
- 첫 번째 방식
- 사용자한테 입력 받은 값을 int타입으로 저장.
- 두 번째로 입력 받은 값을 String 타입으로 형변환 한 다음, .split()를 사용하여 String타입의 배열로 값을 저장.
- 첫 번째 입력 받은 값과 배열의 index 값을 각각 곱한 값을 출력.
- index의 값과 계산을 끝낸 각각의 자리수에 맞추어 10, 100 을 곱한 다음 전체 값을 더하여 최종 값 만들기.
- 두 번째 방식
- 사용자한테 입력 받은 값을 String타입으로 저장.
- 두 번째로 입력 받은 값을 .toCharArray() 메서드를 사용하여 char타입의 배열에 낱개로 저장.
- 첫 번째로 입력 받은 값을 숫자형으로 변환.
- 첫 번째 입력 값과 char타입의 배열에 저장된 값의 index 각각 곱하여 출력. 이때 char[index] 형태는 숫자가 아스키코드로 출력되기 때문에 - '0'을 붙이기.
- index의 값과 계산을 끝낸 각각의 자리수에 맞추어 10, 100 을 곱한 다음 전체 값을 더하여 최종 값 만들기.
- 첫 번째 방식
- 세 번째는 BufferedReader + InputStreamReader 를 사용해서 문제를 풀었다.
- 사용자한테 입력 받은 값을 int타입으로 저장.
- 두 번째로 입력 받은 값의 길이를 구하기. String.valueOf(두 번째로 입력받은 값을 저장한 변수).length(); 사용
- int형 배열을 만들기.
- for문을 사용하여 두 번째 입력 받은 값의 길이 만큼 돌리기.
- 두 번째로 입력 받은 값을 10으로 나누고 나머지 값을 int형 배열의 각 index에 저장하기.
- 두 번째로 입력 받은 값을 10으로 나누고 몫을 다시 두 번째로 입력 받은 값을 담은 변수에 저장하기.
- for문에서 1회 실행될 때마다 int형 배열에 담은 index값과 첫 번째로 입력받은 값 곱하여 출력.
- for문이 끝난 다음 최종으로 첫 번째 입력 받은 값과 두 번째 입력 받은 값 곱하여 출력.
# 느낀 점
- Java 기초 지식이 많이 부족함을 느꼈다.
- 처음에 나는 두 번째로 입력 받은 값을 1글자씩 쪼개어 배열에 담은 다음 첫 번째 입력 받은 값과 곱하여 출력하는 방식을 생각했다. 이 방식도 맞지만 '좀 더 간결하고 메모리 사용을 덜 하면서 3자리 수가 아니더라도 자동으로 자리수까지 계산되어 계산 과정을 출력할 수 있는 방법이 있지 않을가?'라는 생각에 다른 사람들의 소스 코드를 보았다.
- 간결한 소스 코드와 수학적 사고 능력이 좋은 사람들이 많았다. 각 자리수를 split하여 저장하지 않고도 10으로 나누어 나머지 값을 저장하는 방법도 있었다. 그래서 이를 참고하여 10으로 나누어 나머지 값을 저장하는 방법으로 풀어보았다.
- 처음에 입력 받은 값을 int형으로 받을지, String으로 받을지 고민을 했다. 두 가지 방법 다 사용해보았고, 각각의 차이점에 무엇이 있는지 chat-gpt와 대화를 하면서 이해했다. 그리고 여기서 Java 기초지식이 많이 부족함을 느꼈다.
# 메모
- int타입을 문자열로 변환할 때.
- String.valueOf(변수); 사용
- .split()는 문자열 타입만 가능.
- 문자형 char의 배열로 저장하려면 String타입의 .toCharArray() 메서드를 사용해야한다.
- .toCharArray() 메서드는 문자열을 문자형으로 변환할 때 사용한다.
- int[] 배열은 초기화가 필수.
- int[] arr = new int[6];
- [6] 에서 6이란 숫자는 크기를 말한다.
- 값에 접근할 시, int value = arr[i]; 로 하면 된다
- ArrayList<Integer>도 사용할 수 있었으나 사용 안함. int[]와 ArrayList<Integer>의 차이점을 이해해야 함.
- chat-gpt에 물어보니 차이점을 잘 알려주었다.
항목 int[] (기본형 배열) ArrayList (컬렉션) 크기 조절 고정 크기 (변경 불가) 유동 크기 (자동 증가 가능) 요소 추가 인덱스로 직접 할당 (arr[i] = x) .add() 메서드 사용 자료형 기본형 int 객체형 Integer (박싱 필요) 성능 빠름 (메모리, 속도 효율적) 느림 (박싱/언박싱으로 성능 저하) 메서드 지원 없음 많음 (add, remove, sort 등) 메모리 사용량 적음 많음 (객체로 저장되므로 오버헤드) 초기화 방법 new int[크기] 필요 new ArrayList<>() 사용 용도 단순한 수치 처리, 고정 크기 데이터 동적 데이터 저장, 리스트 조작 출력 편의성 Arrays.toString() 필요 System.out.println(list) 가능
- chat-gpt에 물어보니 차이점을 잘 알려주었다.
'코딩 테스트' 카테고리의 다른 글
[코딩테스트] 백준 10171번: 고양이 (0) | 2025.05.08 |
---|---|
[코딩테스트] 백준 11382번: 꼬마 정민 (0) | 2025.05.07 |
[코딩테스트] 백준 10430번: 네 개의 식을 계산 후 비교 (0) | 2025.05.06 |
[코딩테스트] 백준 18108번: 불기 연도 -> 서기 연도 (0) | 2025.05.05 |
[코딩테스트] 백준 10926번: ??! (Java) (0) | 2025.05.05 |