출저 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V1SYKAaUDFAWu "조합" 해당 문제는 어떤 row를 고를 것인지가 중요하다. 그리고 탐색한 결과를 모든 열이 k 개 연속된 숫자가 있는지 검사하는 것을 구현하는 것이 키포인트이다. 어떤 row를 고를 것인가는 조합과 같다. 바꾸는 row의 개수를 최소로 하는 값을 찾으면 되므로, 아래의 경우를 탐색한다. 그리고 만족하는 값을 찾았다면 결과 출력. 모두 바꾸지 않는 것 ~모든 행을 다 바꾸는 것 여기서 특정 row를 1 혹은 0 으로 바꾼 후에는 원래 상태로 복구 시켜주는 것이 필요하다. 마치 백트래킹 처럼.. 따라서 선택한 row를 0 혹은 1로..
출저 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWHPkqBqAEsDFAUn "구현... 다시보자! 꾸에에에엑" 다시보자... 왜 이런 생각을 못했을까. 처음에 그냥 브루트 포스로 전체 경우의 수를 재귀로 다 돌려보았다. 시간 초과. 풀이 참고해서 풀었따. 알고리즘은 아래와 같다. 1. 각 배점을 받을 때마다 최대값을 갱신한다.2. 갱신된 최대값 ~ 0 까지 탐색하며, 만약 이전에 이미 맞았던 점수가 있다면 이 점수에 내가 방금 입력받은 점수를 더해준 값도 체크한다.3. true 로 체크된 값들의 개수를 센다. 12345678910111213141516171819202122232425262728293031..
출저 : https://programmers.co.kr/learn/courses/30/lessons/12899"자리수와 시작 숫자를 구해서 그 지점에서부터 탐색" 구해야 하는 자리수와 시작 숫자를 알고 나서 그 지점부터 탐색하여 탐색 범위를 확 줄여서 시작한다. startWith= 1 startWith= 2 startWith= 4 length = 1 1 (1) 1 (2) 1 (4) length = 2 3 (11,12,14) 3 (21,22,24) 3 (...) length = 39 (...) 9 (...) 9 (...) 위와 같이 검색하면 내가 탐색해야 할 지점을 알 수 있다. 만약 여러 개의 테스트가 주어진다면 이 값을 배열로 저장하는 것도 좋을 듯 하지만 위 문제에서는 필요없어 매번 for문을 돌아서..
출저 : https://www.acmicpc.net/problem/14499 "구현하자." 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899import java.util.Scanner; class Main { static int N,M; static int x,y; static int K; static int[] dice = {0,0,0,0,0,0}; static int[][] map; static int[] dx = ..
출저 : https://www.acmicpc.net/problem/14890 "시뮬레이션" 해당 문제는 다리를 놓을 수 있느냐 없느냐 를 판별하는 것이 핵심인 문제로 아래와 같이 경사로는 두 가지로 분류할수 있다. 내려가는 경사로와 올라가는 경사로가 둘다 비슷하지만 조금 다른 부분이 있다. 내려가는 경사로의 경우 경사로가 이전에 방문하지 않았던 칸으로 놓이기 때문에, 경사로 설치 여부 체크를 하지 않아도 된다. 하지만 올라가는 경사로의 경우 이전에 방문했던 칸에 경사로를 놓아야 하기 때문에 이전에 경사로를 놓아 지금 칸에 도착한 것인지 판별해야한다... 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647..
출저 : https://www.acmicpc.net/problem/14500 "DFS 로 4칸을 간다. ㅗ 경우는 별도로 처리" DFS를 통해 4칸을 이동하면 테트로미노의 도형 4가지를 구할 수 있다. 문제는 의 처리이다. 아래와 같이 처리해 주었다. map을 다시 for 문을 돌면서 4개 셀의 값을 선택하여 처리한다. 1 : ㅗ 만들 수 없는 경우2 : 그냥 선택한 4개 셀을 다 더하면 되는 경우3 : 중앙값 + ( 4개 셀의 값 - 이중 최소인 값) 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757..
출저 : https://www.acmicpc.net/problem/14501 "시뮬레이션" 12345678910111213141516171819202122232425262728293031323334353637import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer; public class Main { static int N; static int map[][]; static int max = 0; public static void main(String[] args) throws IOException { BufferedReader br = new ..
출저 : https://www.acmicpc.net/problem/1592 "시뮬레이션" 1234567891011121314151617181920212223242526272829303132333435import java.util.Scanner; public class Main { static int n,m,l; static int[] map; static int cur, next; static int res; static Scanner sc = new Scanner(System.in); public static void main(String[] args) { n = sc.nextInt(); m = sc.nextInt(); l = sc.nextInt(); map = new int[n]; while(true..
출저 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LwsHaD1MDFAXc "가장 많이 열리는 걸 열고, 그다음에 차근차근." 알고리즘 기본 로직은 맵에서 주위에 지뢰가 없는 칸을 탐색해 먼저 클릭하여 해당 칸을 오픈한다. 이렇게 오픈된 나머지 8칸에 대해서도 똑같은 검사를 한다. 이렇게 하여 주위에 지뢰가 없는 칸들이 모두 없어 지게 되고, 그 후에 남아있는 칸들의 수를 세서 최종 값을 더한다. 이때, 지뢰가 없는 칸의 탐색은 BFS를 통해 한다. 더해서 아래 큐에 들어가는 중에 중복이 생겨났었고, 시간초과가 났다. 탐색은 중복을 줄이는 것이 정말 중요하다. visited 배열을 두어 다시 들어가지 않..
출저 : https://www.acmicpc.net/problem/3055 "순서를 잘 생각한 BFS 두개." 먼저 물과 고슴도치를 이동 시키기 위해 두개의 Queue를 준비한다. 두개의 queue는 각 time 마다. 상하좌우로 이동할 것이다. 이때 물과 고슴도치 중 어떤 것을 먼저 움직여야 할까? 문제에 조건에 따르면 다음 시간에 물이 찰 곳에는 고슴도치가 이동하지 못한다고 했으므로, 물을 먼저 이동 시켜주고, 물이 찰 곳에 고슴도치가 이동하지 못하도록 해주어야 한다. (만약 고슴도치가 수영을 N 번 할 수 있다고 한다면 문제가 어려워 질거같다... ) 12345678910111213141516171819202122232425262728293031323334353637383940414243444546..
- Total
- Today
- Yesterday