시뮬레이션 39

[BOJ] 17135. 캐슬 디펜스

조합과 BFS를 이용하여 반복하는 문제이다. 이 문제는 조합을 이용하여 궁수의 위치 3가지를 뽑고, 그 위치에서 BFS를 이용하여 거리 D안에 있는 적들을 PriorityQueue에 집어 넣어 계속 쳐치해가며 map상에 모든 적이 사라질때의 count 값의 최대값을 출력해주는 방식으로 해결하였다. 구현이 어렵지는 않으나 조건이 많으므로 천천히 하나하나 구현하는 것이 필요한 문제이다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64..

Algorithm 2020.05.13

[BOJ] 16236. 아기 상어

BFS를 이용한 문제이다. 이 문제에선 다음에 갈 점들의 우선순의가 거리>위쪽>왼쪽 으로 주어져있으므로 다음에 갈점을 위해 PriorityQueue를 사용하였다. BFS를 한번 돌때마다 pq에 갈점들을 쭉저장하고 pq가 없다면 멈추는 형식으로 구현하였다. 문제를 이해하는데 오래걸렸다. 문제를 꼼꼼히 읽는 습관이 필요할 것 같다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 ..

Algorithm 2020.05.11

[SWEA] 4366. 정식이의 은행업무

문자열을 가지고 변환시키면서 모든경우를 다해보는 문제이다. 이 문제는 문자열을 가지고 진법변환을 해주고 HashMap을 사용하는 문제였다. 다만 주의할점은 문자열을 건드는 작업을 할때는 String 클래스를 이용하는 것보다 StringBuilder클래스를 이용해주는 것이 훨씬 시간적으로 이득이라는 점이다. 또한 문자열의 문자를 치환할때 StringBuilder 클래스의 setCharAt()함수를 이용해주면 이문제를 쉽게 풀수있다. 진법변환에 대해선 10진수를 다른 진수로 바꾸려면 Integer.pasrseInt(Num,N진법수) 와 같은 형태로 바꿀수 있지만 다른진수에서 10진수의 형태로 바꾸려면 직접해주는게 편할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18..

Algorithm 2020.05.02

[BOJ] 17281.⚾

구현이 중요한 문제다. 문제에 주어진 그대로 구현을 하는 문제이다. 구현은 까다롭지 않지만 다만 여기서 주의할점은 타자의 순서인데, 이 문제에선 1번선수가 4번타자를 맡게 되므로 나머지 8명의 선수를 이용하여 순열을 하고 그때 그때마다 게임을 진행하는 식으로 하였다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86..

Algorithm 2020.05.01

[BOJ] 12100. 2048(Easy)

단순구현과 백트래킹이 합쳐진 문제이다. 이문제는 2048을 구하는 단순구현과 4가지 방향으로 5번을 가봐야하는 과정이합쳐진 문제였다. 2차원 배열을 이용하여 재귀를 도는 백트래킹은 처음 구현해봐서 어떻게 해야하는지 고민을 많이했다. dfs()란 함수에서 이차원 배열을 저장할 temp[][] 를 이용하여 해결하였다. 즉 재귀함수호출전 temp에 map을 다 저장하고 재귀함수 호출뒤 map에 temp를 다시 복원시키는 방법을 사용하였다. 간단한 방법이지만 생각하는 부분에 있어서 많은 시간을 사용하였다. 구현뿐만 아니라 전반적으로 다시 봐야할 필요가 있는 문제인 것 같다. 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..

Algorithm 2020.04.30

[SWEA] 6019. 추억의 2048게임

이 문제는 복잡해보이지만 문제에 주어진 조건 그대로 하면되는 단순구현 문제이다. 문제에서 가장어려웠던 요소는 4가지 방향을 생각해주는 것과 0을 한쪽으로 옮기는 과정이었다. 0을 한쪽으로 옮기는 메소드를 moveZero~(row or col) 이런식으로 구성하였는데, 다양한 문제에서 빈번하게 사용되는 코드이므로 숙지하고 있으면 많은 도움이 될 것 같다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 7..

Algorithm 2020.04.30

[SWEA] 4050. 재관이의 대량 할인

단순 구현 문제이다. 단순 구현 문제이긴 하지만 과정을 좀 생각해야했던 문제이다. 내림차순으로 정렬후 3개씩 묶고 그중 가작 작은걸 빼주는 식으로 구현하였다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 package swea; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Solution_d4_4050_..

Algorithm 2020.04.30

[SWEA] 5658. 보물상자 비밀번호

이문제는 단순 구현문제이다. 배열을 순환하는 방법은 크게 두가지가 있다. 첫번째로 인덱스를 이용하여 인덱스가 배열크기를 넘어가면 0으로 바꿔주면서 순환하는 방법과 두번째로 List를 사용하여 첫번째원소를 맨뒤에 붙이면서 순환하는 방법이 있다. 이 문제를 품에 있어 인덱스를 사용하는 방식을 사용하였고, 3중포문을 이용하여 문제를 해결하였다. 또 이문제에서는 중복체크를 하는 과정이 있는데, 순서가 있는 중복체크를 할때에는 TreeSet을 이용하면 된다. 또한, TreeSet에 순서정하는 방식을 정할땐 다음과 같이 comparator를 선언해주면 된다. set=new TreeSet(new Comparator() { public int compare(Integer o1, Integer o2) { return -..

Algorithm 2020.04.29

[Programmers] 튜플

완전탐색을 하는 문제이다. 이문제는 약간의 문자열 파싱과 완전탐색을 하는 문제이다. 맨처음 어떻게 풀까 고민을 하다가 An번째에서의 특정 조건을 찾게 되었다. 그 조건은 An번째에서는 가장 많은 순선대로 앞에서 부터 나오고, 맨앞에 나오는 원소는 모든 배열에서 가지게 되고 그 후부터는 하나씩 감소한 갯수만큼 가진다는 것을 알게 되었다. 그래서 countingArr라는 것을 선언하여 1부터 100000까지 카운팅해주는 과정을 거쳐 최종 결과인 result를 찾았다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 4..

Algorithm 2020.04.27

[Programmers] 크레인 인형뽑기 게임

단순 구현 문제이다. Stack을 이용한 단순 구현 문제이다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 package programmers; import java.util.Stack; public class Solution_2019카카오겨울_크레인인형뽑기게임 { public static void main(String[] args) { int[][] board= {{0,0,0,0,0},{0,0,1,0,3},{0,2,5,0,1},{4,2,4,4,2},{3,5,1,3,1}}; int[] moves= {1,5,3,5,1..

Algorithm 2020.04.27