
백준 - 타이핑 25215 (다이나믹)
2023. 3. 25. 10:39
알고리즘(BOJ)/Silver
문제 분석 직관적으로 문제에 접근하는 게 오히려 쉽게 풀렸다. 처음에는 1부터 size-1까지 해결한 후 처음과 마지막 문자열에 대한 처리를 하려고 했으나 경우의 수가 너무 많았다. 문제에 나온 것처럼 상태(◇눌린 상태인지), 현재, 다음 의 문자의 대/소문자여부를 파악하여 처리했다. 현재 소문자일 때, 소문자상태면 더 볼 것도 없이 하나의 입력만 필요하다. 현재 소문자일 때, 대문자상태면 무조건 두 개의 입력이 필요하다. 하지만 여기서 다음 문자가 소문자라면 ☆을 입력해 준 것일 테니까 대문자 상태여부는 바꿔주지 않는다 현재 대문자일 때, 대문자상태면 더 볼 것도 없이 하나의 입력만 필요하다. 현재 대문자일 때, 소문자상태면 무조건 2개의 입력이 필요하다.위에서 반대로 다음 문자가 대문자면 ☆을 입력해..

백준 - 섬의 개수 4963
2023. 2. 10. 15:53
알고리즘(BOJ)/Silver
문제 분석 2차배열에서 1인수중에 인접해있는것만 체크하면 되는 쉬운문제였다. 대각선도 포함시키는게 해당 문제의 키포인트라고 생각한다. 방문여부만 체크해서 중복되지 않게 했다. 전체 소스 import java.util.*; import java.io.*; public class Main { static int[][] array; static boolean[][] visited; static int x=1,y=1; static int cnt=0; public static void bfs(int a, int b) { Queue q = new LinkedList(); q.offer(new int[] {a,b}); int[] x_move = {-1,1,0,0}; int[] y_move = {0,0,-1,1}; i..

백준 - 빗물 14719
2023. 2. 5. 21:44
알고리즘(BOJ)/Gold
문제 분석 문제 이해도 쉽고 풀이과정을 생각하는게 재밌는 문제였다. 첫열과 마지막열에는 빗물이 찰 수 없으니 넘겨주고 두번째 열부터 왼쪽과 오른쪽에 자신보다 큰 벽이 있는지 확인했다. 일부러 2차배열을 선언하지 않고 풀려고 노력했다. 전체소스 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); int x = In..

백준 - 신기한 소수 2023
2023. 2. 3. 17:26
알고리즘(BOJ)/Gold
문제 분석 한자리 소수는 2,3,5,7 이 있다. 맨 앞자리에 올 수 있는수도 이것 뿐이다. 4개의 경우에만 재귀를 호출하도록 했다. 재귀는 1~9까지 한자리씩 붙여가며 소수인지 판단했다. 소수인지 판단은 처음에는 1과 자기자신의 수가 오기전까지 나눠지는 수가 있는지 했는데, 제곱근으로 시간을 단축시킬 수 있다고 하여 Math.sqrt를 사용했다. 전체소스 package test; import java.util.*; import java.io.*; public class Main { static int size; public static boolean check(int input) { for(int i=2; i

백준 - 팔 1105
2023. 1. 31. 20:38
알고리즘(BOJ)/Silver
문제분석 L과 R이 자리수가 다르다면 8이 나올수가 없다. 자리수가 같을 때만 체크해주면 된다. 왼쪽부터 한개씩 끊어서 숫자가 같은지 체크해 줬다. 전체소스 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); String L = st.nextToken(); String R = st.nextToken(); int ..

2667 - 단지번호붙이기 (BFS)
2023. 1. 11. 15:43
알고리즘(BOJ)/Silver
순서도 2중포문을 돌면서 1인경우 큐에 담아준다 그 후 꺼내서 x와y좌표를 이동하며 1인경우 q에 또 담아주고 방문여부를 true로 바꿔준다. 위의 순서도는 문제를 처음 접할 때 핵심로직에 관해서 그린거여서 참고정도만 하면 좋을 것 같다. 결과 값을 오름차순으로 바꿔줘야 하기때문에 sort로 정렬해줬다. 단지번호 만큼 이중포문을 도는게 맘에 들지 않아서 큐에 그 값을 담아줬다가 배열에 다시 넣어주는것도 좋은 방법일것 같다. int cnt = 1; System.out.println(danji-1); int[] result = new int[danji]; while (cnt < danji) { int ck=0; for (int i = 0; i < size; i++) { for (int j = 0; j < s..

1697 - 숨바꼭질 (BFS)
2022. 12. 12. 15:39
알고리즘(BOJ)/Silver
import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; //백준 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int subin = sc.nextInt(); int dong = sc.nextInt(); int[] visited = new int[2000001]; Queue q = new LinkedList(); // 시작노드 q.offer(subin); int a = 0; while (!q.isEmpty()) { a = q.poll(); if (a == dong) { System.out.pri..

백준 - 10994 별 찍기 19
2022. 12. 7. 00:12
알고리즘(BOJ)/Silver
package test; import java.util.Scanner; //백준 public class Main { static String[][] array; public static void star(int start, int input) { if(start>input) return; int max = input - start; for (int i = start; i < max; i++) { for (int j = start; j < max; j++) { // 첫줄 마지막줄 if (i == start || i == max - 1) { array[i][j] = "*"; } if (j == start || j == max - 1 ) { array[i][j] = "*"; } } }star(start+2, ..

백준-10870 (재귀)
2022. 12. 6. 22:54
알고리즘(BOJ)/Silver
import java.util.Scanner; //백준 public class Main { static long fibonacci(int before, int sum, int input) { long output=0; if(input>2) { before=sum-before; sum=before+sum; System.out.println("before: "+before + "sum: "+sum); return output=before+fibonacci(before,sum,input-1); }else if(input==2) { return 1; }else if(input==1) { return 1; }else if(input==0) { return 0; } return output; } public sta..