java 95

프로그래머스 위클리 챌린지 11주차 - java

문제 설명 1. 사각형들이 좌표형식으로 주어진다. 2. 사각형들은 서로 곂치게 놓여지며, 맨 테두리로 욺직일 수 있다. 3. 사람과 아이템이 주어졌을 때, 가장 짧게 아이템을 가져올 수 있는 방법을 구하여라 풀이 과정 // 이거근데 풀었다고 뜨기는 떴는데 다른 테스트 케이스는 통과를 못한다... 아마 정답에 문제가 있는것 같고 나중에 변경해야 할 수도 있다. // 처음에 풀었을 때에는 22번 테케에서 막히게 되었다. 그 답안은 후첨하겠다. 내가 푼 방법은 계속 문제를 생각하다 가장 간단히 구현할 수 있는 방법을 통해 풀었다. 아마 따라하면 쉬운 방법일 테지만, 나중에 답이 틀릴 수 있고 그렇게 되면 변경하도록 하겠다. 1. 먼저 모든 값을 2배해 준다. ( x축간, 혹은 y축간 거리가 1씩밖에 차이가 안..

[백준 11559번] Puyo Puyo - java

문제 설명 1. 12줄 - 6칸짜리 보드가 있다. 2. .과 각각의 색깔로 구분되는 뿌요가 주어진다. 3. 뿌요가 상하좌우로 같은 색의 뿌요가 있으면 터진다. 중요한 점은 여러 뿌요들이 터져야 하는 경우 동시에 터지고, 1연쇄가 늘어난다. 4. 아래 뿌요가 터지면 위의 뿌요가 내려온다. 이렇게 전체 뿌요를 구하면 된다. 풀이 과정 1. 오늘 진행된 데브매칭 3번문제와 거의 유사한 문제이다... 해당 문제는 진짜 거의 다 풀었는데 시간이 넘어서 못풀었다. 그래서 아쉬워서 이 문제라도 풀었다... 2. BFS를 사용하고, 이전에 풀었던 2048(easy)에서의 정렬 방식을 참고하면 간단히 구현할 수 있다. 3. 간단하게 코드에 대해 설명하자면 - 하나씩 char로 하면 귀찮으니까 01 2 3 4 ... 이렇..

알고리즘 공부 2021.10.17

[백준 12100번] 2048(easy) - java

문제 설명 1. N개의 크기가 정해진 보드가 주어진다. 2. 보드에 2~ 1024의 크기 내의 숫자들이 주어진다. 3. 숫자들은 위로, 아래로, 왼쪽으로, 오른쪽으로 딱 붙여서 정리할 수 있으며, 위로 이동하는 경우 이전의 숫자와 이후의 숫자가 같으면 두 숫자는 합쳐진다( 8에 8이 이동하면 16하나가 되는 느낌이다.) 4. 5번의 이동이 있은 후 가능한 최대 숫자를 return하면 된다. 풀이 과정 1. 엄청나게 코드를 더럽게 풀었다. 모든 경우를 하나하나 만들었음... 2. 재귀함수 문제이다. 적절한 범위를 지정해 주면 된다. 3. 간단하게 코드에 대해 설명하자면 - 위, 아래, 오른, 왼 코드를 하나씩 만들어서 모든 경우를 탐색한다 (위 - 위 - 위 - 위 - 위), (위, 위, 위, 위, 아래)..

알고리즘 공부 2021.10.16

프로그래머스 위클리 챌린지 10주차 - java

문제 설명 1. 좌표평면상의 선분들이 주어진다. 2. 선분들이 만나는 좌표들의 정수값들만 고려한다. 3. 만나는 곳은 * 나머지는 . 으로 이루어진 최소 크기의 도형을 RETURN하면 된다. 풀이 과정 1. 이게 왜 level2문제일까....? 생각보다 난이도가 높았다. 차근차근 하나씩 구해주자. 이거 클래스 써서 하려 했더니 코드가 진짜 말도안되게 더러워져서 절차적으로 풀었다. ( 교점 구하기 ) 2. 먼저 선들이 만나는 점을 구한다. 고등학교 때에 배운 일차함수 방정식을 쓰면 된다.

프로그래머스 위클리 챌린지 9주차 - java

문제 설명 1. n개의 송전탑은 트리 형태로 이어져있다. 2. 무조건 트리 형태이며, 중간에 한 칸을 끊어 두 개의 네트워크로 분할한다. 3. 두 네트워크 간의 차이의 절대값의 최소값을 return하면 된다. 풀이 과정 1. 간단한 문제이지만 효율적인 방법으로 풀기는 생각보다 힘들다..... 2. 먼저 모든 전선을 연결시킨다. 3. 그리고 각각의 경우에서 자신의 경우 / 자식의 경우를 나누어, DFS를 해 준다. 4. 모든 경우를 구하면서 연결을 끊은 경우를 구했으면, 그 연결을 해제하고, 다른 곳에서는 해당 연결을 다시 구하지 않을 것이다. 5. 그 경우들에 대해 최소의 절대값을 구하면 답을 return할 수 있다. 코드

[백준 1100번] 하얀 칸 - java

문제 설명 1. 8*8 크기 배열이 주어진다. 2. '.'은 말이 없는 상태, 'F'은 말이 놓여진 상태이다. 3. 흰색 말은 0,0 0,2 0,4 ...이런식으로 주어질 때 흰색 말의 개수를 return하면 된다. 풀이 과정 1. 간단한 문제인데, 더 쉽게 풀 수 있다. 배열도 필요없다. 2. 0,0 0,2 0,4 0,6 1,1 1,3 1,5 .... 이렇게 주어지는거면 흰색 말은 x축 y축의 합이 짝수인 곳마다 주어진다. 3. 배열을 받으면서 그 배열이 짝수가 되는 곳의 말을 판별하면 된다. 코드 알고리즘 풀이의 비중을 낮추고 자바 웹 개발 기초를 더 공부하기로 했음..이번주는 백신을 맞아서 조금 쉬어가기로 했다.

알고리즘 공부 2021.10.05

[백준 1764번] 듣보잡 - java

문제 설명 1. N, M이 주어진다. 2. N개는 들어보지 못한 사람, M개는 보지 못한 사람이다. 3. 두 가지 모두의 경우에 해당하는 사람을 구하면 된다. 풀이 과정 1. 기초적인 HashMap문제이다. 여기서는 HashSet으로 풀면 됨. 2. N개의 배열에 대해 각각을 HashSet으로 받아준다. 3. 그 HashSet에 대해 존재하는 M개의 배열들을 ArrayLIst에 저장한다. 4. 그 ArrayList를 배열을 바꾸고 출력시키면 된다. 코드

알고리즘 공부 2021.10.04

프로그래머스 위클리 챌린지 8주차 - java

문제 설명 1. 명함의 가로, 세로 크기가 주어진다. 2. 명함을 담을 수 있는 가장 작은 크기의 명함지갑의 크기를 return하면 된다. 3. 명함은 눕혀서 보관할 수도 있고, 세워서 보관할 수도 있다(가로세로 위치 상관x) 풀이 과정 1. 굉장히 간단한 문제이다. 2. 명함의 가로, 세로 기준으로 긴 값과 짧은 값들을 저장한다. 3. 긴 값들의 최대값, 짧은 값들의 최대값을 곱하면 답을 구할 수 있다. 4. 여기서 구현한 코드는 process별로 나누어서 길게 나왔지만, 실제로는 짧은값 긴값 두개를 만들어서 이를 바로바로 구하면 for문을 한 번만 사용해서도 충분히 구할 수 있을 것이다. 코드 코드2

[백준 12015번] 가장 긴 증가하는 부분 수열2 - java

문제 설명 1. N이 주어진다. 2. N개의 배열들에 해당하는 숫자들이 각각 주어진다. 3. 가장 긴 증가하는 부분 수열을 구하면 된다. 풀이 과정 1. 처음에는 DP로 풀려 하였는데, 시간 복잡도에서 문제가 발생했다. 이후 DP와 이분탐색을 섞어서 해결하였다. 2. 부분 수열을 저장할 Arraylist를 만들어, 이를 채워 준다.(이걸 쓴 이유는, 부분 수열의 경우 언제까지 값이 있을지 모르기도 하고, 중간에 값을 바꾸려고 하기 때문이다.) 3. 숫자를 순서대로 입력받으며, 현재 입력된 순서의 숫자가 Arraylist의 가장 위의 값보다 큰 값인지 확인한다. 4. 이후, 그 값이 더 큰 값인 경우 배열을 추가해 주면 된다. 4. 그렇지 않은 경우 배열 내부의 값들 중 해당 값보다 큰 수들 중 최소의 숫..

알고리즘 공부 2021.09.26

[백준 1780번] 종이의 개수- java

문제 설명 1. N이 주어진다. 2. NxN배열에 해당하는 종이들이 -1, 0, 1로 주어진다. 3. 한 범위의 모든 종이들이 해당 숫자로 이루어진 경우들을 구한다. 4. 범위는 전체 크기 사이즈를 가로세로를 3으로 나눈 총 9개의 범위로 이루어져 있고, 해당 범위에 다른 종이가 있으면 다시 나누어 준다. 5. -1, 0, 1 각각 얼마나 많은 '범위'가 존재하는지 구하면 된다. 풀이 과정 1. 분할 정복 문제이다. 2. 값들을 더 작은 수로 나누고, 그곳에서부터 조합해 맞추어 나가면 된다. 3. 이전 글의 쿼드 트리와 유사한 문제이다. 그냥 범위를 더 잘게 나누고, 괄호를 없애면 된다. 4. 전체 범위에 대해 다른 숫자가 존재하는지 판단하고, 있으면 더 잘게 나누고 없으면 지금 숫자를 해당 배열에 더해..

알고리즘 공부 2021.09.22