일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이노캠
- 이노베이션캠프 동북
- JAVA 기초
- 이것이 자바다 확인문제
- 객체지향
- 이것이 자바다 13장
- 자바
- 이것이 자바다 연습문제
- Til
- Java
- 자바의 정석 6장
- 이노베이션캠프
- 이노베이션 캠프
- 자료구조
- 챗GPT 명령어 작성팁
- ChatGPT
- BFS
- dfs
- 백준
- 채팅GPT
- 3장 확인문제
- 스프링 입문강의
- 인프런
- 자바 언어 기초
- 이것이 자바다
- ArrayList 개념
- Comparable과 Comparable
- 웹개발 기본지식
- 조건문과 반복문
- 트리 지름 구하기
- Today
- Total
기록공간
[TIL] BOJ - 2739,10430,2439,2775,2579,1744(JAVA) 본문
1. 백준 2739
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for(int i=1; i<=9; i++) {
System.out.println(N+" * " + i + " = " + N*i);
}
sc.close();
}
}
|
cs |
1. 키보드로부터 입력으로 받을 Scanner 객체를 생성해준다.
2. 1~9 까지 곱셈을 수행할 숫자 N을 입력 받는다.
3. 1부터 9까지 곱셈을 수행해야 하기 때문에, 반복문 for를 사용해서 System.out.println()메소드를 사용해 구구단의 각단을 출력해준다.
4. 마지막으로 Scanner 클래스를 닫아준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import java.util.Scanner;
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();
System.out.println((A+B)%C);
System.out.println(((A%C)+(B%C))%C);
System.out.println((A*B)%C);
System.out.println(((A%C)*(B%C))%C);
sc.close();
}
}
|
cs |
3. 백준 - 2439 (별찍기 - 2)

문제 접근 :
출력 창을 보면, 첫번 째 줄에는 별이 하나, 두번 째 줄에는 별이 2개, N번 째 줄에는 별이 N개 찍혀있음을 알 수 있다. 따라서 숫자 N을 입력받으면, N번만큼의 반복문을 사용해야 함을 알 수 있다.(1)
또한, 첫번 째 별 출력하는 과정에서는, N-1칸 만큼의 공백이 존재하고, 두번 째 별을 출력하는 과정에서는 N-2 번 만큼의 공백이 존재한다.
따라서, N-i번 만큼의 공백을 만들어줄 반복문이 필요하다. (2)
마지막으로, i번 째 행에는 i 번만큼의 별이 출력되므로, 별을 출력할 반복문이 필요하다. (3)
따라서 총 3번의 반복문이 필요함을 알 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for(int i=1; i<=N; i++) {
for(int j=1; j<=N-i; j++) {
System.out.printf(" ");
}
for(int k=1; k<=i; k++) {
System.out.printf("*");
}
System.out.print('\n');
}
}
}
|
cs |
4.백준 2775 (부녀회장이 될테야)

문제 접근 방법 :
(조건 : 0층의 i호에는 i명이 살 수 있다. 또한, n과k는 0보다 같거나 크고, 14보다 작거나 같다.)
문제에서는 a층의 b호에 살려면, 아래(a-1)층의 1호부터 b호 까지 사람들의 수를 합한 만큼 사람들을 데려와 살아야 한다고했다. 또한, 입력으로 k( 층), n(호)가 주어지면, k층 n호에 거주할 수 있는 인원을 구해야한다.
위 조건을 잘 활용해, 2차원 배열을 사용해 0층 i(1<i<=14)호에 해당하는 사람들을 초기화 해주었다.
다음, 1층부터 14층까지 i호에 해당하는 사람들을 아래층의 i번째 호에 해당하는 사람들 만큼 더해주었다.
자세한 코드는 아래와 같다.
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
|
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
int[][] dp = new int[15][15];
for(int i=1; i<=14; i++) {
dp[0][i] = i;
}
for(int i=1;i<=14; i++) {
for(int j=1;j<=14; j++) {
int sum=0;
for(int k=1; k<=j; k++) {
sum += dp[i-1][k];
}
dp[i][j]=sum;
}
}
for(int i=0; i<T; i++) {
int k=sc.nextInt();
int n= sc.nextInt();
System.out.println(dp[k][n]);
}
sc.close();
}
}
|
cs |
5. 2579 - 계단 오르기


문제 접근 방법 : 계단은 한 번에, 한 계단 혹은 두 계단씩 오를 수 있다. 또한, 세개의 계단을 모두 밞아서는 안된다는 제약이 있다. 예를들어, 시작점 부터, 3번 째 계단까지 가는걸 계산해보자.
1->3 혹은 2->3 이렇게 밖에 갈 수 없다. 1->2->3 이렇게 계단을 올라간다면, 규정에 어긋나는것이다.
또한 얻을 수 있는 총 점수의 최대값을 구하는 프로그램을 작성하라했으므로,
i번째 계단에서 얻을 수 있는 최대 점수를 점화식으로 구현하면, DP[i] = Math.max(DP[i-2]+staris[i],DP[i-3]+stairs[i-1]+stairs[i])가 될 것이다.
즉, i번째 계단까지 오르는 방법은 (i-1)번째 계단에서 한 계단을 올라오거나, (i-2)번째 계단에서 두 계단을 올라오는 두 가지 방법이 있다. 첫 번째 경우는 i-1번째 계단에서 한 계단을 올라오므로, 그 전에는 i-2번째 계단에 있어야 한다. 따라서 이 경우의 최대 점수는 DP[i-2] + stairs[i]가 된다. 두 번째 경우는 i-2번째 계단에서 두 계단을 올라오므로, 그 전에는 i-3번째 계단에 있어야 한다. 따라서 이 경우의 최대 점수는 DP[i-3] + stairs[i-1] + stairs[i]가 된다.
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
|
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] stairs = new int[n+1]; // 각 계단마다 점수를 저장할 배열
int[] dp = new int[n+1]; // 최대로 얻을 수 있는 점수를 저장할 배열
for(int i=0; i<n; i++) {
stairs[i] = sc.nextInt();
}
dp[1] = stairs[1]; // 첫 번째 계단까지 오를 때, 얻을 수 있는 최대 점수
if(n>2) {
dp[2] = stairs[1] + stairs[2]; // 두 번째 계단까지 오를 때, 얻을 수 있는 최대 점수
}
for(int i=3; i<=n; i++) {
dp[i] = Math.max(dp[i-2]+stairs[i],dp[i-3]+stairs[i-1]+stairs[i]);
} //i - 2번째 계단까지 오르고 i번 째 계단을 밞았을 때와, i-3번째 계단까지오른 후,i-1,i번째 계단을 밞았을 경우 중 최대 값
System.out.println(dp[n]);
sc.close();
}
}
|
cs |
'TIL(Today I Learned)' 카테고리의 다른 글
[TIL] 05.04 (0) | 2023.05.04 |
---|---|
[TIL] 프로그래머스 알고리즘 Study (0) | 2023.05.03 |
[TIL] 이노베이션 캠프 in 동북 Part 05 . 객체지향 1 (0) | 2023.04.28 |
[TIL] 이노베이션캠프 in 동북 Part 03. 조건문과 반복문 (0) | 2023.04.26 |
[TIL] 이노베이션 캠프 in 동북 Part 02. 연산자 (0) | 2023.04.25 |