BaekJoon Oline Judge - Step 5
함수 응용!
4673. 셀프 넘버
55가 들어오면, 55+5+5 = 65
65는 생성자가 있으므로 셀프넘버가 아니다. 그러므로 list[65]에 true를 저장해 주었다.
나중에 true로 저장되어있지 않은 것은 생성자가 존재하지 않는 셀프넘버이다. 따라서 리스트의 크기만큼 true가 아닌 것들을 출력해 준다.
여기서 조금 헤맸는데 숫자가 최대 네자리에서 최소 한자리까지 들어오기 때문에 아래와 같이 반복문을 돌려서 각자리 수를 더해야 한다.
int sum = i;
while(i > 0) {
sum = sum + i % 10;
i = i / 10;
}
만약 999가 들어온다면,
sum = sum + (999 % 10 => 9)
i = (i / 10 => 99)
----------
sum = sum + (99 % 10 => 9)
i = (i / 10 => 9)
----------
sum = sum + (9 % 10 => 9)
i = (9 / 10 => 몫이 0이므로 반복문 벗어남)
따라서 999+9+9+9처럼 각자리 수를 더할 수 있게 된다.
public class Main {
public static void main(String[] args) {
boolean list[] = new boolean[10001];
for (int i = 1; i<=10000; i++) {
int sum = selfNum(i);
if(sum <= 10000) {
list[sum] = true;
}
}
for (int i = 1; i < 10000; i++) {
if (!list[i]) {
System.out.println(i);
}
}
}
static int selfNum(int i) {
int sum = i;
while(i > 0) {
sum = sum + i % 10; //9
i = i / 10; //999
}
return sum;
}
}
값은 잘 나오는데 돌리면 계속 런타임 에러 떠서 뭔가 하고 계속 봤더니...!
if(sum <= 10000) {
list[sum] = true;
}
아마도 배열 크기 할당에 문제가 있었던 것 같다. sum이 10000보다 작을 때만 list에 넣어주어야 한다.
1065. 한수
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
int num1, num2, num3, com1, com2;
if (num < 99) {
System.out.println(num);
} else {
int cnt = 99;
for(int i=100; i<=num; i++) {
num1 = i/100;
num2 = (i%100)/10;
num3 = ((i%100)%10);
com1 = num1-num2;
com2 = num2-num3;
if(com1==com2) {
cnt++;
}
}
System.out.println(cnt);
}
}
}
한 자리수 일 때는 입력받은 숫자를 그대로 출력시킨다. 일의 자리, 십의 자리는 모두 등차수열이기 때문이다.
따라서 카운트도 0이 아닌 99로 초기화 한다.
일의자리, 십의자리, 백의자리를 분리한 후에 각각의 자리수의 차가 같으면 카운트를 증가시키는 간단한 문제이다.
2448. 별 찍기 - 11
입출력 예제
원래는
3 = 3 * 2^0
6 = 1 * 2 ^ 1
12 = 3 * 2 ^ 2
24 = 3 * 2 ^ 3 . . .
이렇게 6부터 6은 2의 1승짜리 세모 1개, 12는 2의 2승짜리 세모 3개, 24는 2의 3승짜리 세모 3개
이런 식으로 규칙을 찾아서 하려했는데 생각해보니 공백을 생각 못함...! 새로운 새모가 추가될 때 마다 공백도 넣어야하는데 너무 복잡해짐
그래서 결국 다른 풀이보고 해결했다 ㅠㅠ
* 프랙탈 구조 알아보기
'CS > Baekjoon' 카테고리의 다른 글
[Algorithm] 백준 단계별로 풀어보기 - 단계 7. 문자열 (0) | 2019.04.17 |
---|---|
[Algorithm] 백준 단계별로 풀어보기 - 단계 6 (0) | 2019.04.16 |
[Algorithm] 백준 단계별로 풀어보기 - 단계 4 (0) | 2019.04.07 |
[Algorithm] 백준 단계별로 풀어보기 - 단계 3 (0) | 2019.03.30 |
[Algorithm] 백준 단계별로 풀어보기 - 단계 1, 2 (0) | 2019.02.20 |