분류 전체보기 243

[SWEA] 1949. 등산로 조성

이차원 행렬상에서 특정조건의 최장길이를 구하는 문제이다. 최장길이를 구하는 문제는 DFS와 백트래킹으로 풀면 쉽게 풀 수 있다. 맨처음 이문제를 접근하였을 때 BFS와 3차원 visit배열로 접근하였다. 이 방법으로도 풀리긴 하지만 DFS와 2차원 visit 배열의 백트래킹을 사용하면 훨씬 간결한 코드를 얻을 수 있다. 이 문제에선 주의할점이 두가지 있는데, 첫째 산을 깎을수 있다는 점과 둘째 깎을때 꼭 K만큼이 아니라 K이하 만큼 깎을수 있다는 점이다. 두가지를 유념하여 DFS를 한다면 쉽게 풀수 있었던 문제이다. 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 3..

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] 1339. 단어수학

상당히 많은 시간을 투자했던 문제이다. 우선 간단하게 N의크기가 10이하인것을 보고 백트래킹으로 접근하려했다. 하지만 최악의 경우가 10!정도가 나오는데 이것 말고도 안쪽에서의 String 연산때문에 시간초과를 해결할 수 없었다. 그래서 StringBuilder를 사용하여 결국 문제는 해결하였지만 최악의 시간복잡도를 가지고 해결하게 된 셈이 되었다. 아래가 다음 코드이다. 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..

Algorithm 2020.04.30

[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] 불량 사용자

처음 문제를 접했을 때 설계에 상당히 많은 시간을 사용하였다. 단순 문자열 파싱 문제인지 알았는데, 자세히 보니 전혀 다른 문제였다. 출력의 경우의 수를 자세히 보다 보니 특정한 규칙을 찾게 되었다. 이차원 배열이 있고, 가로축을 user_id, 세로축을 banned_id라고 하고 패턴이 매칭되면 1을 둔다고 가정한다면, 맨처음 입력 예시에선 다음과 같이 적용이 된다. "frodo" "fradi" "crodo" "abc123" "frodoc" "fro*d*" 1 1 0 0 0 "abc1**" 0 0 0 1 0 이에 따른 출력은 2가지 경우로 frodo, abc123 과 fradi, abc123 가 나오게 된다. 여기서 찾은 규칙은 패턴이 매칭되는 1에 한해서 각행마다 하나의 열을 선택하게 되고, 다음행에..

Algorithm 2020.04.28

[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