본문 바로가기

알고리즘 문제풀이

(51)
SWEA - 보급로 JAVA 백준4485 - 녹색옷을 입은 젤다와 99프로 일치하는 문제다 한 노드에서 다른 한노드로의 최소경로를 구하는데, 가중치가 다른 상황이므로 다익스트라 알고리즘을 적용하면 바로 풀린다. 시작은 (0,0) 도착지는 (size-1, size-1) 이다. package a0407; import java.util.*; import java.io.*; public class SWEA보급로 { static int size; static int[][] arr; static int[][] sumarr; static class node implements Comparable{ int xidx; int yidx; int weight; node(int xidx, int yidx, int weight){ this.xidx = x..
SWEA - 키 순서 java 1) 2차원 배열에 나보다 크면 -1, 작으면 1로 표시한다. -> 반대로 표시해도 상관없음 2) dfs처럼 나보다 크면 그 숫자로 파고들어간다 -> 파고들어갈수 있을때까지 간다 3) 나보다 작은수도 2번과 같은 원리로 4) 2), 3)에서 몇개의 숫자를 파고들수있는지 계산하고 그 합이 n-1이면 전체 정답+1 처리한다. package a0406; import java.util.*; import java.io.*; public class 키순서 { static int[][] arr ; static int[]visit; static int numcnt; public static void main(String[] args) throws Exception{ BufferedReader br = new Buffe..
SWEA - 오! 나의 여신님 JAVA 최소시간을 구해야하므로 bfs를 이용한다. 악마는 수연이와 빈 곳을 침범 가능 수연이는 빈곳으로만 이동가능 여신을 만났을때 종료! package a0406; import java.util.*; import java.io.*; /* 악마의 손아귀를 피해서 최소시간에 여신에게 가야함 악마의 손아귀 -> 악마 위치 기준으로 1초마다 상하좌우로 퍼져나감 수연 -> 1초마다 상하좌우로 이동 가능 최소시간은? */ public class SWEA오나의여신님 { static char[][] arr; static int[][] visit; static int sero ; static int garo ; static int starti;static int startj; static int angeli;static int..
백준2239 - 스도쿠 java package a0406; import java.util.*; import java.io.*; /* 2차원배열에서 0인곳 dfs돌면서 조건 만족하는 수 완탐? 조건 1) 가로 2) 세로 3) 범위사각형 */ public class 백준2239_스도쿠 { static int[][] arr = new int[9][9]; static ArrayList zerolist = new ArrayList(); static int allflag = 0; static void dfs(int cnt) { //System.out.println(cnt); //print(); if(allflag==1)return; if(cnt==zerolist.size()) { for(int i=0; i
SWEA - 벽돌깨기 java 중간에 있는 벽돌이 깨졌을때 없어지는 구현을 자동적으로 처리하기위해 list를 이용했다. 계속 값복사를 해줘야해서 불편하긴함 package a0405; import java.util.*; import java.io.*; /* 구슬 개수만큼 던질때 최대한 벽돌을 많이 부셔야됨 -> 구슬개수만큼 중복순열 돌리면 될듯? 1) 구슬 놓는다 2) 놓는 위치에 따라 영향 미치는 범위를 다 체크 3) 체크한 범위를 다 0으로 바꾸고 다음 중복순열로 돌림 4) 구슬 개수만큼 중복순열 돌리면 없어진 벽돌수 체크 -> 최대값 갱신 구슬 영향범위에 따라 없어지는 부분 list로 하면 편할듯? */ public class 벽돌깨기 { static int ballnum; static int sero; static int gar..
백준15961 - 회전초밥 java 전형적인 투포인터 문제다 map 자료구조를 이용하여 풀었다. package a0405; import java.util.*; import java.io.*; /* 투포인터 이용하면 될듯? */ public class 백준15961_회전초밥 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int dish = sc.nextInt(); int menu = sc.nextInt(); int len = sc.nextInt(); int plus = sc.nextInt(); int[] arr = new int[dish]; for(int i=0; i
SWEA - 파핑파핑 지뢰찾기 JAVA package a0404; import java.util.*; import java.io.*; /* 1) 2차원배열 탐색하면서 8방탐색했을때 모두 지뢰 없는곳 큐에 넣는다 2) 큐에 있는 좌표들 순서대로 꺼내서 8방 원소들 visit처리, 3) 8방원소들 visit처리하면서 또 8방지뢰없는 곳이라면 큐에 또 넣음 4) 2,3 큐 원소 없을때까지 반복 5) visit처리 안되어있는 부분만큼 result++ */ public class 파핑파핑지뢰찾기 { static int size; static char[][] arr; static int[][] visit; static int[] di = {-1, -1, -1, 0, 1, 1, 1, 0}; static int[] dj = {-1, 0, 1, 1, 1, 0..
SWEA - 프로세서 연결하기 JAVA package a0404; import java.util.*; import java.io.*; /* 우선순위 -> 1) 연결 많이 2)선 짧게 1) 연결해야되는 곳의 위치를 리스트에 담는다 2) 리스트에 있는 좌표를 돌면서 중복순열을 돈다(연결가능한곳만) 3) 중복순열은 사방탐색으로 일직선 쭉 이을수 있으면 그방향으로 선 놓기 4) 리스트 사이즈만큼 탐색했을때 우선순위대로 max값 계산 */ public class 프로세서_연결하기 { static int size; static int[][] arr; static int[][] cannot; static ArrayList list;//전선 이어야될 리스트 static int[] di = {-1, 0, 1, 0}; static int[] dj = {0, 1..