백준 TEST05_함수 사용하기

baekjoon_java



## 필요 패키지 및 외부 클래스

1
2
3
4
5
6
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;

셀프넘버

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
29
30
31
32
33
34
class hamsu{
public int d(int num){
int xxxx = num/1000;
int xxx = (num/100)%10;
int xx = (num/10)%10;
int x = num%10;
num = num + xxxx + xxx + xx + x;
return num;
}
}

class TEST05_01 extends hamsu{
public TEST05_01(){
// ArrayList array = new ArrayList();
int i = 0;
int[] fin = new int[10000]; //배열 10000개 선언 알아서 0으로 초기화함.

for(i=0;i<10000;i++){
if(d(i)<10000){
fin[d(i)] = 1;
}

if(fin[i] == 0){
System.out.println(i);
}
}
}
}

public class TEST05{
public static void main(String[] args) throws IOException{
TEST05_01 test05_01 = new TEST05_01();
}
}

한수

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class TEST05_02 {
public TEST05_02() throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = 0;
int count = 0;
int xxxx,xxx,xx,x = 0;

while(true){
n = Integer.parseInt(br.readLine());
if(n<=1000){
break;
}
}

for(int i=1;i<=n;i++){
if(i<100){
count++;
}
if(i>=100){
xxx = i/100;
xx = (i/10)%10;
x = i%10;
if(xx-x==xxx-xx){
count++;
}
}
if(i>=1000){
xxxx = i/1000;
xxx = (i/100)%10;
xx = (i/10)%10;
x = i%10;
if(xxxx-xxx == xxx-xx)
if(xx-x == xxx-xx){
count++;
}
}
}
bw.write(count+"\n");
bw.flush();
bw.close();
}
}

public class TEST05{
public static void main(String[] args) throws IOException{
TEST05_02 test05_02 = new TEST05_02();
}
}

별찍기 - 11

별찍기에 대해서 초반에 어떻게 문제를 풀어야하는지 감이 너무 오질 않았다.

따라서 강의를 보면서 이해하는 형식으로 진행하였다.

해당 강의는 C를 기반으로 진행하였으므로 나는 자바의 형식에 맞게 수정을 해주었다.

[C언어] 백준 - 별찍기 (2448) ★밤비와 코딩

https://youtu.be/WjmEVp-Lgns

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
class TEST05_03 {
static char[][] arr;
public TEST05_03() throws IOException{
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = input_num();

arr = new char[n][2*n-1]; //예제 y축 24칸, x축 47칸임(맨 아래 밑변).
//배열 선언은 while문 아래가 될 수 없다.

for(int i=0; i<n; i++) {
for(int j=0; j<2*n-1; j++) {
arr[i][j] = ' ';
}
}//초기화 구문, 자바에서 미선언시 char은 널값으로 초기화됨. 따라서 모두 공백으로 미리 초기화.

solution(n,n-1,0);// n은 몇층까지 를 의미, n-1은 첫 시작의 별 위치 -> x축, 0은 첫줄을 의미한다. ->y축

for(int i=0; i<n; i++) {
bw.write(arr[i]);
bw.write('\n');
}
//이차원배열로 선언되었기 때문에 a[i]번째 줄에 저장된 모든 값을 출력.
bw.flush();
bw.close();

}

public int input_num() throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = 0;
int count = 0;
while(true){
n = Integer.parseInt(br.readLine());
for(int k=0;k<=10;k++){
if(n==3*(Math.pow(2, k))){
count = 1;
}
//제대로 된 수를 입력할 때 까지 무한반복 N은 3*2^k승.
}

if(count == 1)
break;
}
return n;
} // 제대로된 n값을 입력하였느지 확인. 제대로된 값이 아니라면 무한반복.

public void solution(int n,int x,int y){
if (n == 3) {
arr[y][x] = '*'; //첫 별 *
arr[y + 1][x - 1] = '*'; //두번 째 별 1 * *
arr[y + 1][x + 1] = '*'; //두번째 별 2
arr[y + 2][x - 2] = '*'; //세번째 별 1 *****
arr[y + 2][x - 1] = '*'; //세번째 별 2 *****
arr[y + 2][x] = '*'; //세번째 별 3 *****
arr[y + 2][x + 1] = '*'; //세번째 별 4 *****
arr[y + 2][x + 2] = '*'; //세번째 별 5 *****
return;
} //n이 3일때 별을 그려주는 로직 시작. // n이 3이 최소임.

solution(n/2, x, y); // 첫 큰 삼각형
solution(n/2, x-(n/2) , y+(n/2)); // 왼쪽 큰 삼각형
solution(n/2, x+(n/2) , y+(n/2)); // 오른쪽 큰 삼각형
}
}


public class TEST05{
public static void main(String[] args) throws IOException{
TEST05_03 test05_03 = new TEST05_03();
}
}



Share