https://www.acmicpc.net/step/5
함수부터는 난이도가 조금 다른것같아서
개별적으로 문제리뷰를 올리겠습니다.
# 15596
정답 코드
public class Test {
long sum(int[] a) {
long ans = 0;
for(int i=0;i<a.length;i++){
ans+=a[i];
}
return ans;
}
}
첫번쨰 문제는 쉽습니다.
# 4673
- 제출한 정답 코드
public static void main(String[] args) {
int[] arr = new int[10036]; // 10000의 각 자리수합에 최대값이 10036이므로
int tmp,res;
for(int i=1; i<=10000; i++) {
tmp=i;
res=i;
while(tmp>0) {
res += tmp%10;
tmp/=10;
}
arr[res]++;
} // 셀프넘버 찾기
for(int i=1; i<10000; i++) {
if(arr[i]==0)
System.out.println(i);
} // 셀프넘버 출력
}
저는 이런식으로 풀었습니다. 10000이라는 숫자까지 돌며 부르트 포스 방식으로 일일이 셀프넘버를 찾았고,
또다시 10000을 넘지않는 셀프넘버만을 출력해주었습니다.
여기서 중요한건 셀프넘버를 저장할 배열에 최대값은 9999가 가지는 10036입니다,
이 방식은 생성자를 찾는 방식보다, 훨씬 간소하고 효율적이라고 생각했습니다.
비교해보실만한 다른코드를 공유해드립니다.
public class Main {
public static void main(String[] args) {
boolean[] isNotSelfNumber = new boolean[10001];
for (int i = 1; i <= 10000; ++i) {
int dn = getDn(i);
if (dn <= 10000) {
isNotSelfNumber[dn] = true;
}
}
for (int i = 1; i < isNotSelfNumber.length; ++i) {
if (!isNotSelfNumber[i]) {
System.out.println(i);
}
}
}
private static int getDn(int n) {
int dn = n;
while(n > 0) {
dn += n % 10;
n /= 10;
}
return dn;
}
}
구글기준 첫번째 블로글에 코드인데요. while문과 if문이 많아서 더 시간과 메모리측면에서 비효율적입니다.
# 1065
저는 사실 문제 이해부터 조금 난해했습니다.
여기서 중요한건
1~99까지 모두 등차수열로 취급 해주고 있는것이였습니다. (당황스러운 문제..)
즉, 99이하의 수가 들어오면 등차수열의 개수는
입력받은수 그자체였습니다.
풀이코드를 보실까요?
// 한수
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n,han=0;
int[] a=new int[3];
n = sc.nextInt();
if(n<100)
han=n;
else if(n==1000) {
han=144;
}
else {
han=99;
for (int i = 100; i <= n; i++) {
int k = 0;
int t = i;
while (t > 0) {
a[k] = t % 10;
t /= 10;
k++;
}
if (a[0] - a[1] == a[1] - a[2])
han++;
}
}
System.out.println(han);
sc.close();
}
else if에서 1000이 들어왔을땐, 999을 넣었을때와 같은 값으로 돌려보고 처리해주어 예외사항을 간단히 해결하고
세자리수에 대해서만 구현해주었습니다.
자릿수를 받는 a 배열에 while문을 통해 넣어주고
if (a[0] - a[1] == a[1] - a[2]) 문을 통해 등차수열인지 확인해줍니다. 맞으면 ++
최종값을 출력해주면 끝!
+
마지막문제는 사실 어려웠어요. 등차수열 계산이 한자리수일때, 두자리수일때는 모두 등차수열로 취급해주므로,
세자리수일때와 1000이 들어올때만 나눠서 잘 처리하면되는 문제였습니다.
언제나 문제이해가 제일 중요하네요!
'Algorithm > 백준 단계별 문제' 카테고리의 다른 글
[백준] 11. Brute Force - Java 코드 (0) | 2022.02.17 |
---|---|
[백준] 7. String 문자열 - Java 코드 (0) | 2020.01.27 |
[백준] 5. Array 배열 - Java 코드 (0) | 2020.01.27 |
[백준] 4. while문 - Java 코드 (0) | 2020.01.27 |
[백준] 3. for문 - Java 코드 (0) | 2020.01.27 |