Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- offset
- VUE
- 이클립스
- wappalyzer
- Java
- springMVC
- intellij
- Postman
- spring
- CloutNative
- MySQL시작하기
- MYSQL에러
- SpringBoot
- String
- restful api
- Lombok
- DB생성
- frontend
- 스프링에러
- gradle
- minikube
- appleM1
- SQL
- windows10
- 우분투에war배포
- NullPointerException
- K8S
- pagination
- Seek_Keyset
- MySQL
Archives
- Today
- Total
미운 오리 새끼의 우아한 개발자되기
[백준 #2577] 숫자의 개수 (java) 본문
1. 나의 정답
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 C = Integer.parseInt(br.readLine());
int[] arr = new int[10];
long num = A*B*C;
while(num/10 > 0) {
if(num%10 == 0) {
arr[0]++;
} else if (num%10 == 1) {
arr[1]++;
} else if (num%10 == 2) {
arr[2]++;;
} else if (num%10 == 3) {
arr[3]++;;
} else if (num%10 == 4) {
arr[4]++;;
} else if (num%10 == 5) {
arr[5]++;;
} else if (num%10 == 6) {
arr[6]++;;
} else if (num%10 == 7) {
arr[7]++;;
} else if (num%10 == 8) {
arr[8]++;;
} else if (num%10 == 9) {
arr[9]++;;
}
num /= 10;
}
for(int i =0; i<arr.length; i++)
if(num == i)
arr[i]++;
for(int a : arr)
System.out.println(a);
}
}
진짜 직관적인(?) 나의 코드 ^^...
좋은 생각이 안떠올라서 일단 맞추고 다른 사람들의 정답을 분석해보기로 했다.
2. 다른 사람 정답(1)
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
int value = (in.nextInt()*in.nextInt()*in.nextInt());
String str = Integer.toString(value);
in.close();
for(int i=0; i < 10; i++) {
int count = 0;
for(int j=0; j < str.length(); j++) {
// char -> int 해주는 방법은 '0'을 빼주는 것
if((str.charAt(j) - '0') == i) {
count++;
}
}
System.out.println(count);
}
}
}
여기서 퍼온 코드인데..
일단 나는 char -> int로 바꿔줄 때 '0'을 빼줘야한다는 사실 조차 몰랐다 ㅋㅋㅋㅋ
그리고 난 배열에 답들을 담을 생각을 했는데
이 코드를 보면 그냥 count 변수에 값을 담아 바깥 for 문이 돌 때 마다 출력했다..
근데 이중 for문이라 시간복잡도가 O(n^2)임..
2. 다른 사람 정답(2)
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[] arr = new int[10];
int val = Integer.parseInt(br.readLine())
* Integer.parseInt(br.readLine())
* Integer.parseInt(br.readLine());
String str = String.valueOf(val);
for(int i=0; i<str.length(); i++)
arr[(str.charAt(i) - 48)]++;
for(int v : arr)
System.out.println(v);
}
}
일단 BufferedReader가 Scanner에 비해 더 우수한 성능을 가지고 있다고 한다.
백준은 오늘 처음으로 풀어봐서.. 기존에 풀던 프로그래머스와는 다르게 입력부터 다 받아야해서 입력 받는 부분이 아직 익숙하지 않다..
위의 코드는 for문이 하나라서 시간 복잡도가 O(n)..
2. 다른 사람 정답(3)
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[] arr = new int[10];
int val = Integer.parseInt(br.readLine())
* Integer.parseInt(br.readLine())
* Integer.parseInt(br.readLine());
while(val!=0) {
arr[val%10]++;
val /= 10;
}
for(int result : arr) {
System.out.println(result);
}
}
}
그래 이거지....!
내가 바라던 게 바로 이거였다...ㅎ
단순히 Test Case를 통과하는 것 뿐만 아니라
메모리와 시간복잡도를 고려하면서 코딩을 해야해서..
코딩테스트는 단기간에 준비할 수는 없는 것 같다.
앞으로 하루에 1시간씩 꾸준히 단계별로 풀어가봐야겠다.
'Coding Test > 오답노트' 카테고리의 다른 글
[백준 #1157] 단어공부 (java) (0) | 2022.03.07 |
---|---|
[Programmers] Lv1. 소수 찾기 (feat. 에라토스테네스의 체) (0) | 2022.01.24 |