이번 문제는 사실 해결했지만, 억지로 부여잡고 문제를 해결했기에
기존에 내가 작성한 기가 막힌(부정적인 의미로) 코드와 인터넷에 작성된 코드를 비교하려 한다.
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();
int c = sc.nextInt();
int sum = (a * b* c);
String str = Integer.toString(sum);
//System.out.println(str);
int[] num = new int[str.length()]; // 스트링을 담을 배열 str의 길이만큼 배열 생성
int _0 = 0;
int _1 = 0;
int _2 = 0;
int _3 = 0;
int _4 = 0;
int _5 = 0;
int _6 = 0;
int _7 = 0;
int _8 = 0;
int _9 = 0;
for(int i = 0; i < str.length() ; i++ ) { // for문 시작
num[i] = str.charAt(i) - '0';
if(num[i] == 0) { // if문 시작
_0++;
}else if(num[i]== 1) {
_1++;
}else if(num[i]== 2) {
_2++;
}else if(num[i]== 3) {
_3++;
}else if(num[i]== 4) {
_4++;
}else if(num[i]== 5) {
_5++;
}else if(num[i]== 6) {
_6++;
}else if(num[i]== 7) {
_7++;
}else if(num[i]== 8) {
_8++;
}else if(num[i]== 9) {
_9++;
}
//System.out.println(num[i]);
}// for문 종료
System.out.println(_0);
System.out.println(_1);
System.out.println(_2);
System.out.println(_3);
System.out.println(_4);
System.out.println(_5);
System.out.println(_6);
System.out.println(_7);
System.out.println(_8);
System.out.println(_9);
sc.close();
}
}
1. 변수 3개를 작성하여 수를 받고 그들의 곱을 sum 변수에 대입.
2. String str변수를 만들어 sum에 저장된 세 정수의 곱을 문자열화.
3. 문자열화 된 문자 하나하나를 저장시킬 int형 배열 생성
4. 0~9까지의 숫자의 갯수를 카운팅해줄 변수 생성 (이 부분을 축약시킬 수 있을거라 생각)
5. 반복문을 사용하여 배열의 길이만큼 반복시키고 한글자씩 int형 배열 num에 대입
6. 조건문을 사용하여 배열에 입력된 데이터와 숫자가 동일할 경우 해당 변수 증가.
7. 프린트(4번을 축약시킬 수 있다면 프린트문도 축약시킬 수 있다고 생각)
인터넷에서 참고한 정답 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int value = (in.nextInt() * in.nextInt() * in.nextInt()); // value에 한 번에 세가지의 값을 곱하여 저장.
String str = Integer.toString(value); // 곱해진 값을 String으로 변환하여 변수 str에 저장
in.close(); // 더이상 입력이 없으므로 close();
for (int i = 0; i < 10; i++) { // 첫 번째 for문 시작
int count = 0; // 같은 숫자 체크
for (int j = 0; j < str.length(); j++) { // 두 번째 for문 시작
if ((str.charAt(j) - '0') == i) { // 한 글자씩 나누어진 문자열과 i(0~9)를 비교하여
count++; // 같은 값이 된다면 count를 증가시킨다.
}
}// 두 번째 for문 종료
System.out.println(count); // 축척된 같은 값을 바로 출력하고 for문 처음으로 돌아가 count를 초기화.
}// 첫 번째 for문 종료
}
}
코드가 엄청 짧아졌다는 것에 굉장히 회의감이 들지만
나는 초보이므로 어쩔 수가 없다.
공부해야할 점
1. int value 변수에 nextInt()를 사용해서 한 번에 저장했다는 점
2. count와 이중 for문, 0~9를 i로 대체 활용하여 바로바로 비교하고 및 print함으로써 코드 축약.
3. CharAt(int index)로 추출한 숫자형 문자는 char형이므로 int 변환시 아스키코드로 변환되기 때문에
'0' (48)을 빼주어 의도한 리턴값을 얻어야한다.
해당 코드는 배열을 사용하지 않았음으로 추후에 배열이 있는 코드를 다시 분석 또는
내가 위의 코드를 참고하여 새롭게 코드를 작성해봐야겠다.
https://st-lab.tistory.com/45의 코드를 참고하였습니다.
'Basic > 코딩테스트' 카테고리의 다른 글
Comparable과 Comparator (0) | 2022.05.13 |
---|---|
[브론즈3] 백준 10817번 자바(JAVA) - 세 수 (0) | 2022.05.10 |
[브론즈3] 백준 2440번 자바(JAVA) - 별 찍기 - 3 (0) | 2022.05.10 |
[브론즈2] 백준 1152번 자바(JAVA) - 단어의 개수 (0) | 2022.04.26 |
[브론즈2] 백준 3052번 자바(JAVA) - 나머지 (0) | 2022.04.20 |