문제 풀기신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신
어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로로 연결된 것은 연결이 된 것이고 대각선으로 연결이 된 것은 떨어진 그림이다
문제 설명 문제 풀기 참고 링크 > 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. 한 배추의 상하좌우 네 방향에 다른 배추가 위치한 경우에 서로 인접해있는
문제 풀기수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는
문제 풀기참고 자료첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토들의 정보가 주어진다. 즉, 둘째 줄부
문제 링크전쟁은 어느덧 전면전이 시작되었다. 결국 전투는 난전이 되었고, 우리 병사와 적국 병사가 섞여 싸우게 되었다. 그러나 당신의 병사들은 흰색 옷을 입고, 적국의 병사들은 파란색 옷을 입었기 때문에 서로가 적인지 아군인지는 구분할 수 있다. 문제는 같은 팀의 병사
문제 링크기존에 풀었던 탐색문제와 거의 똑같다. 하나 다른 점이 있다면, '상하좌우'의 4방향을 탐색하는 것이 아니라 8방향을 탐색하는 것이다.(n, m)을 기준으로 초록색 방향들을 접근하면 된다.
문제 설명 문제 링크 생각 정리 정리된 생각에 대한 논리 생각정리 부분 중, "단계를 업데이트 시켜준다"는 부분을 구현할 때 고민했다. queue에서 꺼낸 단어의 idx와 새롭게 탐색중인 단어의 idx를 둘 다 알아야했다. 새롭게 탐색중인 단어의 idx는 wor
백트래킹 공부를 하면서, 내가 그 동안 어려워했던 문제들이 백트래킹 문제라는 것을 알게 되었다.. 백트래킹이란 현재 상태에서 가능한 모든 후보군을 따라 들어가며 탐색하는 알고리즘이다.문제 링크참고 링크(해당 참고 링크가 백트래킹에 대한 정리가 너무너무 잘 되어있다 !)
N과 M (1) 문제풀이 링크N과 M(1) 문제와 달라진 점은 "오름차순"으로 출력을 해야한다는 것이다. (방문하지 않은 경우 ) ++ 배열에 넣을 때, 이전 인덱스에 있는 값보다 클 경우에만 배열에 값을 넣는다. 배열에 처음 넣을 경우에는, 따로 비교 없이 바로 넣어
N과 M(1) 풀이 링크N과 M(2) 풀이 링크이번 문제와 앞선 N과 M문제들의 다른 점은 중복선택이 가능하다는 것이다.그럼 방문체크를 안하면 되는거 아닌가 ??앞선 N과 M 문제들에서 방문체크를 했던 이유는 중복없이 고르기 위해서 이 숫자를 내가 선택했는지 체크하기
문제 링크N개의 숫자와 N-1개의 연산자가 주어졌을 때, 만들어낼 수 있는 결과의 최대/최소값을 구하는 문제이다.
BFS 풀이 문제 설명 문제 링크 생각 정리 정리된 생각에 대한 논리 BFS(너비 우선 탐색)로 풀이를 할 때에는 처음 찾은 변환과정이 가장 짧은 변환과정이라고 할 수 있기 때문에, 가장 짧은 변환과정을 업데이트하는 과정을 따로 거치지 않았다. 하지만
문제 링크
N개의 도시를 모두 순회할 때 필요한 경비의 최소값을 구하는 문제이다. 마지막 도착지에서 끝나는 것이 아니고, 마지막 여행지 -> 처음 출발지로 돌아와야 한다.각 도시간 이동하는데 드는 비용이 0이라면, 도시간 이동이 불가능함을 나타낸다. 즉, 이 경우에는
문제 설명 문제 링크 > 정수들의 순서를 바꾸지 않고! 적절히 더하거나 빼서 (양수 또는 음수로써 주어진 배열 내의 숫자를 백트래킹 하여) target number와 같은 수를 만들도록 하는 방법의 수를 찾아내는 문제이다. 생각 정리 정리된 생각에 대한 논리 나는
생각 정리 삼차원 배열의 탐색 동,서,남,북,상,하 방향으로 이동할 수 있다. 탈출하기 위해서는 출구('E')를 통해야만 한다. '#' 금으로 막혀 지나갈 수 없다. 'S' 시작 위치를 나타낸다. 주어진 삼차원 배열을 전부 탐색했음에도 E에 도달할 수 없다면 탈출이 불
불이 번져가는 경로와 지훈이가 탈출할 수 있는 경로 두 가지를 생각해야 한다.2차원 배열에서 불이 번져가는 경로를 먼저 구하고 (bfs함수 호출), 그 다음 지훈이가 갈 수 있는 경로를 구한다. 불이 번져가는 경로는 벽이 아닐 경우 네 방향(상,하,좌,우)로 가능하고지
생각 정리 2차원 배열에는 빙산의 높이가 담겨있다. 배열에 담긴 빙산의 높이는 일년마다 동서남북 네 방향으로 붙어있는 0이 저장된 칸의 개수만큼 줄어든다. 무한반ㄴ복 (year를 증가시켜간다.) => 0이 아닐 때 bfs 진행하여 탐색할 때 인접한 지역이 0이라면
F : 사무실의 층수G : 목적지의 위치(층수)S : 강호가 현재 있는 곳U, D : 엘레베이터에 존재하는 버튼 (각각 위로 U층, 아래로 D층 이동)현재 층에서 할 수 있는 것 : 위로 U층 또는 아래로 D층이동한 층이 1층보다 아래거나, 사무실의 층수를 벗어나면 c
삼차원 배열 사용익은 토마토가 여러개일 수 있음 => queue에 한번에 넣기 , 방문 표시저장될 때부터 모든 토마토가 익어있는 상태라면 0을 출력해야 한다.bfs 시작하기 배열 길이를 벗어나거나,이미 방문했거나,토마토가 들어있지 않은 칸이라면=> 탐색된 위치에 있는
현재 위치 X에서 할 수 있는 일1\. 1초 후, X-1 또는 X+1 로 이동 2\. 0초 후, 순간이동 세 가지 경우를 고려하면서 순간이동할때만 시간 안더해주면 되지 않을까 ?배열의 크기는 수빈이의 현재위치 \* 2 +1로 정해둔다.X-1 또는 X+1 이동과 순간이동
생각 정리 두 대륙을 연결하는 가장 짧은 다리 구하기 서로 다른 대륙임을 어떻게 구분하는가 서로 다른 대륙임을 나타내는 배열을 하나 만든다. 서로 다른 대륙임을 나타내는 배열에서 bfs를 진행. 일단 상하좌우 탐색했을 때 같은 숫자만 있으면 그냥 리턴(=다른 숫자가
생각 정리 맵에서 0은 이동할 수 있는 곳, 1은 이동할 수 없는 곳(벽이 있는 곳)을 나타낸다. (1,1)에서 (N,M)까지 이동하려는데 (실제 배열에서는 0,0에서 N-1,M-1) 최단경로 구하기 한개의 벽을 부수는 것으로 경로가 짧아진다면 한개까지 부술 수 있음
벽 부수고 이동하기 와 같은 로직으로 , 벽을 하나라도 부셨을 때의 비용과 하나도 부시지 않았을 때의 비용을 구한다.다만, 다른 점은 부실 수 있는 벽이 1개가 아니고 K개 이기 때문에 그동안 부신 벽의 개수와 K개를 비교해간다.벽을 부셨는지, 부시지 않았는지가 아니라
아기 상어끼리의 안전거리 최댓값을 구한다고 생각했음그래서 아기상어에서 다른 아기상어까지의 거리 중 최댓값을 구함But, 문제는 아기상어끼리의 최댓값이 아니고 특정 칸에서 아기 상어들과의 안전거리의 최댓값을 구하는 것이었음 => 즉, 상어가 있는 칸에서 bfs를 하는 것
생각 정리 탐색할 수 있는 것 : 3가지 연산 화면에 있는 이모티콘 복사해서 클립보드에 저장 => 이전 내용은 덮어진다. 클립보드에 있는 이모티콘 화면에 붙여넣기 화면에 있는 이모티콘 하나 삭제 화면에 이미 1개 있고, 3가지 연산만 사용해서 이모티콘 S개를 만들어야
불을 먼저 bfs 탐색해서, 각 위치에 도착하는데 걸리는 시간을 구한다.그 다음, 상근이를 bfs 탐색해서 탈출할 수 있을지 확인한다.상근이 bfs탐색할 때 고려해야 하는 것은 상근이가 예전에 해당 위치를 방문했는지상근이가 방문한 곳이 벽인지상근이가 불과 동시 혹은 불
bfs 탐색은 일반적으로 1,2,3,4,5,6 칸을 한다.다만, 숫자가 100을 넘어가거나 방문을 했다면 skip100에 도착했을 떄, 주사위 굴렸던 횟수를 출력한다. (100에 도착하지 못하는 경우는 없다고 한다)이정도 ..?뱀이나 사다리라면 해당 칸이 아니고 '해당
자바 내장함수를 쓰지 않고, 8진수의 숫자 하나당 2진수의 세자리로 나타낼 수 있으니 (ex. 4 -> 110) 이를 이용해보고자 했다.세자리를 맞추기 위해 앞에 0을 붙여도 보고, 배열도 거꾸로 돌려보고 이것저것 다 했지만, 결국 가장 기본적인것을 간과했다 🥲8진수
DN = 2 X N개의 스티커 중 두변을 공유하지 않는 스티커 정수의 최댓값D3을 생각하는 과정에서 막혔다.2 X N개의 스티커에 대해서 D0, D1 두가지로 나누어 생각하기D0 = 2 X N개의 스티커 중 오른쪽 상단을 선택했을 때 두변을 공유하지 않는 스티커 정수의
계단 오르기처럼 풀면된다고 생각해서 자신감을 얻음..연속해서 포도주를 마시지 않아도 된다.즉, k번째 포도주 앞에 있을 때, k번째 포도주를 마시지 않는 것이 최댓값이 될 수가 있다.
Dn = 수열의 n번째 요소까지 가장 긴 증가하는 부분 수열의 길이Sn = 주어진 수열의 n번째 요소단순하게 Dn이 업데이트될 때의 수열의 n번째 요소들을 따로 저장하면 될 것이라고 생각했다.골드인데 금방 풀수있을거 같아 !!!! 라고할뻔Dn이 업데이트될 때는 S1~S
같은 색 뿌요가 4개이상 상하좌우로 연결되면 같은색 뿌요 한번에 없어진다.1.1) 4개이상 상하좌우로 연결되어 있는지 확인하기1.2) 해당 뿌요들은 없애기 (빈칸처리하기 .)뿌요들이 없어지면 위에 있던 뿌요들이 떨어진다.2.1 밑에서부터 그 다음칸이 빈칸이면 위치를 바
cctv들의 개수만큼, 각 cctv들의 (1~5번) 가능한 위치를 dfs를 통해 구한다. cctv (위치, cctv번호) 와 그 때의 방향을 파라미터로 하는 함수를 통해 그 때의 사각지대 개수를 구한다.최소 사각지대 개수를 업데이트 한다.dfs를 통해 가능한 위치를 구
인구이동이 가능할 때 (canMove변수를 설정해서 true일때 while문이 작동하도록 하였다.)canMove false처리방문하지 않았을 때 bfs를 호출한다.해당 반복문이 끝나면 방문여부를 초기화해준다.bfs내에서 \- 상하좌우를 탐색하면서 (국경선이 맞닿아 있
각 단계별로 함수를 만들었다.rotate() - 벨트와 로봇이 함께 한 칸 회전하는 함수 로봇이 내리는 칸에 이르렀다면 내리기robotsMove() 가장먼저 벨트에 올라간 로봇부터(=내리는 위치, N-1에서부터) if (이동하고자 하는 칸에 로봇이 없고 && 내구도가