본문 바로가기

전체 글1048

백준 18258 자바 - 큐 2 (BOJ 18258 JAVA) 문제 : boj18258 문제에 제시된 대로 구현만 잘 하면 되는 문제이다. 큐를 직접 구현해봐도 되고, 자바 혹은 다른 언어에서 제공하는 기본 큐를 사용해서 짜도 된다. '만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.' 와 같은 세세한 조건들만 잘 처리해주면 쉽게 통과할 수 있다. 코드 : github import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.LinkedList; import java.util.PriorityQueue; .. 2022. 3. 15.
읽은 책 소감 - React.js, 스프링 부트, AWS로 배우는 웹 개발 101 읽은 목적은 React를 배우기 위해서였다. 기존 스프링 부트와 함께 jsp를 사용해 js 위주로 짜는 프론트는 사실 좀.. 안멋있다. 개인 취향이다ㅋㅋ. 별로 상세하게 파고들어서 알고싶은 마음이 들지 않았다. 그래서 유명한 리액트는 내 입맛에 좀 맞을까 싶어서 한번 배워보고 싶었다. 한글로 된 리액트 책 중에 괜찮아 보이는게 별로 없었다. 그렇다고 원서를 읽자니 초반에야 열심히 읽겠지만, 이후 열정과 집중력이 좀 떨어졌을 때 끝까지 읽을 자신이 없었다. 그래서 어쨌든 한글로 된걸 선택하기로 했다. 추가로 내 입장에서 백엔드는 node.js로 하는 것 보다는 스프링 위주가 내겐 여러모로 더 유리하다고(사실 취향임ㅋ) 판단했다. 따라서 리액트도 배워보면서, 스프링 + 리액트로 Decoupled Archit.. 2022. 3. 14.
백준 3022 자바 - PRASE (BOJ 3022 JAVA) 문제 : boj3022 반복 로직만 잘 세우면 간단하게 풀 수 있다. 주의할 부분은 'If at any point a child takes a piece of food, and that child had already taken more food than the other children all together (not including the new piece of food),'에서 not including the new piece of food 부분이다. 즉, 현재 아이가 누군지는 알아야하지만 현재 집은것에 대해서는 카운티앟지 않은채로 수만 확인해야 한다. 따라서 현재까지 나온 아이의 총 수를 cnt, 현재 아이가 나왔던 횟수를 cc[아이이름] 이라고 해보자. 그럼 만약 현재 아이의 이름이 A라고 할.. 2022. 3. 14.
백준 6550 자바 - 부분 문자열 (BOJ 6550 JAVA) 문제 : boj6550 s쪽에 포인터를 하나 두고, t쪽에도 포인터를 하나 둔다. 이후 s쪽 포인터를 하나씩 증가시키면서, 해당 포인터가 가르키는 문자가 나올 때 까지 t 포인터를 증가시키면서 찾는다. 최종적으로 t포인터가 t를 전부 찾기 전까지 s쪽 포인터가 끝까지 도달한다면 Yes가 된다. 이하 '예제 입력 1'의 3번째 테스트 케이스를 찾는 과정을 그려봤다. s쪽 포인터가 si, t쪽 포인터가 ti 이다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { private void solution() throws Exce.. 2022. 3. 13.
백준 6186 자바 - Best Grass (BOJ 6186 JAVA) 문제 : boj6186 상하좌우로 인접한 풀때기들의 군락(?) 수만 잘 구하면 된다. 그러니 일단 입력받고, 방문체크 하면서 dfs 돌리며 수를 세면 쉽게 구할 수 있다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { private void dfs(int r, int c, boolean[][] arr) { for (int dr = -1; dr 2022. 3. 12.
백준 14472 자바 - 休憩スペース (Refreshment Area) (BOJ 14472 JAVA) 문제 : boj14472 N, M, D 모두 최대 100 까지이므로 모든 경우를 다 살펴본다 해도 O(2NMD) 정도이다(2는 가로, 세로). 그러니 그냥 어렵게 DP같은걸 끼얹을 필요 없이 그냥 브루트포스를 활용한 구현문제로 보면 된다. 가로, 세로 좌표 [0~N-D, 0~M-D] 의 모든 지점에 대해서 그 우측으로 D번동안 장애물이 없다면 성공, 마찬가지로 아래쪽으로 D번 동안 장애물이 없다면 성공으로 치면 된다. 이하 그림에서는 N=3, M=3, D=2 인 경우 나올 수 있는 모든 경우를 그려보았고 그 중 장애물에 걸리지 않은 경우를 노란색, 걸린 경우를 회색으로 나타냈다. 이걸 코드로 구현만 하면 된다! 코드 : github import java.io.BufferedReader; import ja.. 2022. 3. 11.
백준 14719 자바 - 빗물 (BOJ 14719 JAVA) 문제 : boj14719 '문제'에 나온 이미지를 다시 그려봤다. 이 때 물이 차는 높이를 어떻게 알 수 있을까? 우선 3D로 생각해서 좌측에서 블록들을 본다고 생각해보자. 이 때 물은 좌측에서 시선에 닿는 만큼 차오를 수 있다. 즉 좌측에서 봤을 때 눈에 보이는 부분들에 들어찰 것이다. 좌측에서만 보면 아래와 같이 생각할 수 있다. 이 때 우측은 당연히 저렇게 들어차면 안된다. 따라서 우측에서도 확인해야 한다. 이번엔 우측에서 한번 봐본다고 생각해보자. 그럼 이렇게 생각될 수 있다. 그럼 이제 좌측에서 본 것과, 우측에서 본 것을 합쳐서 각 블록마다 좌측에서 봤을때와 우측에서 봤을 때 보였던 높이 중 작은 쪽을 선택하면 아래와 같이 된다. 좀 더 구체적으로 정의하자면 다음과 같다. 좌측부터 w방향으로 .. 2022. 3. 10.
백준 21356 자바 - Hundraelva kronor (BOJ 21356 JAVA) 문제 : boj21356 간단한 그리디 문제이다. 최소의 지폐 수를 구해야 하므로, 큰 값을 가지는 지폐부터 나누어나가면 된다. 문제의 제한에 맞는 1로 만들 수 있는 가장 큰 수부터 (111,111,111) n이 0이 될 때까지 한 자리씩 줄여나가면서(111,111,111 -> 11,111,111 -> 1,111,111 -> ... -> 1) 나눈 몫이 결국 출력해야 하는 지폐의 수이다. 그리고 매번 남은 나머지가 남은 지폐의 양이 된다. 결국 최종적으로는 1로 나누게 되므로 답을 못구하는 경우는 없다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { private void so.. 2022. 3. 9.
백준 20156 자바 - 기왕 이렇게 된 거 암기왕이 되어라 (BOJ 20156 JAVA) 문제 : boj20156 구현도 빡쌘편이고 함정카드도 꽤 생각하기 힘든 녀석이었다. 역시 항상 20퍼대 이하의 정답률 문제들은 항상 뭔가가 있다. 그리고 요즘 스트릭만 채운다고 실버위주로 풀다가 오랜만에 플래 풀어보니 체감이 확 된다 ㅋㅋㅋ 1. 우선 다른거 다 빼고 동일 스터디 그룹인지 어떻게 알 수 있을지 생각해보자. 이 부분은 간단하다. union-find를 사용해 disjoint set을 파악하면 된다. 입력으로 받은 B와 C가 동일한 그룹인지 확인하려면, B와 C가 같은 그룹내에 속한지 판단만 하면 알 수 있다(일반적으로 union-find를 사용했다면 결국 find(B) == find(C) 라면 동일 그룹이다). 2. 그룹이 해제는 어떻게 해요? 생각할게 너무 많아요! 그룹을 해제하는건 어렵지.. 2022. 3. 8.
백준 1765 자바 - 닭싸움 팀 정하기 (BOJ 1765 JAVA) 문제 : boj1765 1. '내 친구의 친구는 내 친구' + '내 원수의 원수도 내 친구' 이걸 해석은 명확히 해야한다. 우선 '내 친구의 원수'에 대한 내용은 없으니 신경쓸 필요가 없다. 그리고 '내 친구의 친구는 내 친구' 라고 했으니 내 친구라면 쭉쭉 이어나가면서 친구를 찾을 수 있음을 알 수 있다. '내 원수의 원수도 내 친구' 부분이 문제인데, 원수의 원수의 원수 이런건 생각할 필요가 없다. 딱 두 단계에 걸친 원수사이면 친구라는 말이다. 또한 첫 번째 조건과 합쳐져서, 원수의 원수의 친구 또한 내 친구이다! 원수의 원수의 친구의 친구 또한 내 친구이다! 좀 헷갈릴 수 있는데 그냥 주어진 조건 2개에 대해 여러 경우를 생각해보면 저렇게 된다. 정리해보면 - 내 원수 -> 그냥 원수임 - 내 원.. 2022. 3. 7.