재밌고 어려운 IT를 이해해보자~!
[백준] 풀이 본문
CodeUp Programmer를 하다가 같이 교육을 듣는 동기들이 백준 그룹에 초대해줘서 같이 알고리즘 문제를 풀게되었다!
확실히 혼자하는 것 보다 더 동기부여도되서 좋지만, 난이도만 보면 내가 해도 되나 싶기도하다.
그래도 재미있게 할 수 있어서 좋다!
1010.
다리놓기!
왼쪽에 있는 노드 N개와 오른쪽에 있는 노드M개를 연결해서 다리를 놔야한다.
다리는 서로 곂칠 수 없고 N<=M 이다.
다리 개수를 B로놓고 차근차근생각해보면
N M B
1 1 1
1 2 2
1 3 3
1 4 4
1 5 5
2 2 1
2 3 3
2 4 6
2 5 10
3 3 1
3 4 4
3 5 10
3 6 20
이를 배열로 표현해보면
M 1 2 3 4 5 -> N
1 1 2 3 4 5
2 1 1 3 6 10
3 1 1 1 4 10 20
4
5
N < M 인 상황에서는 아무것도 없는 배열 (1로표현) 이되고 M >=N 부터는 일정한 규칙을 갖는다.
첫째행은 등차 1인 배열 1 2 3 4 5
둘째행은 등차를 이전행 이전원소로 가지는 배열 1 3 6 10 15
셋째행은 등차를 이전행 이전원소로 가지는 배열 1 4 10 20 35
라는 규칙을 갖는다!
따라서 그런 배열을 하나 선언하고 원하는 원소값을 찾아주면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int[][] arr = new int[30][30];
for (int i = 0; i < 30; i++) {
arr[0][i] = i + 1;
}
for (int i = 1; i < 30; i++) {
for (int j = 0; j < 30; j++) {
if (j <= i) {
arr[i][j] = 1;
} else {
arr[i][j] = arr[i][j - 1] + arr[i - 1][j - 1];
}
}
}
int T = Integer.parseInt(br.readLine());
int[] ans = new int[2];
for (int a = 0; a < T; a++) {
String[] temp = br.readLine().split(" ");
for (int i = 0; i < 2; i++) {
ans[i] = Integer.parseInt(temp[i]);
}
System.out.println(arr[ans[0] - 1][ans[1] - 1] + " ");
}
}
}
2439.
이별찍기는 5x5 배열이며
첫째행은 공백 " " 4개와 별 1개
둘째행은 공백 " " 3개와 별 2개...
로 이어진다
1행 5열에서 *이 한개 찍혀야 하기 때문에
외부루프는 --를 사용해 받은값부터 1까지 반복을 시키면 된다. (사용자에게 입력을 받아야하기떄문에 1까지~)
외부루프 순환값 a 가 내부루프 순환값 i보다 클동안은 " "공백을 출력하고 i와 같아지면 *을 출력한다!
package atemp;
import java.util.Scanner;
public class temp {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int b = sc.nextInt();
for (int a=b; a>0; a--) {
for (int i=1; i<=b; i++) {
if (a>i) {
System.out.print(" ");
} else {
System.out.print("*");
}
}
System.out.println();
}
}
}
2448.
유명한 피보나치수!
첫번째, 두번째 숫자가 주어지고 3번째부터 규칙이 시작된다.
3번째 숫자는 바로앞 두숫자의 핲, 4번째숫자도 바로앞 두숫자의 합이 이어진다!
N (n) = N (n-1) + N (n-2)
N1 ,N2를 초기화해주고
N3은 N1 + N2를 해준뒤
N2를 N1에 대입하고
N2를 N3에 대입하는걸 반복해준다
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));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
// 1 2 3 5 8 13 21
long[] arr = new long[90];
long n1 = 0;
long n2 = 1;
long fiboN = 0;
for (int i=2; i<=n; i++) {
fiboN = n1+n2;
n1=n2;
n2=fiboN;
}
if (n==0) {
fiboN = 0;
} else if (n==1 ) {
fiboN = 1;
}
System.out.println(fiboN);
}
}
'알고리즘' 카테고리의 다른 글
[백준] 17287 (0) | 2024.05.19 |
---|---|
[백준] 1927 (0) | 2024.05.18 |
Codeup 문제해석 단순반복문 (1) | 2023.12.05 |
Code up 문제해석 if~else2 (0) | 2023.12.02 |
Codeup 문제해석 - if~else문 (0) | 2023.11.28 |