JAVA_문제풀이 백준 10826번: 피보나치 수 4 피보나치 숫자를 구하는 문제입니다. memoization기법을 사용해 문제를 풀 수 있습니다. 놓치기 쉬운 부분 N이 0일때를 생각해야 합니다. 숫자가 매우 크다는 걸 생각해야 합니다. long으로도 부족합니다. dp[i] = dp[i-1]+dp[i-2] dp[i]=dp[i−1]+dp[i−2]... 백준알고리즘JAVA_문제풀이JAVA_문제풀이 백준 1302번: 베스트셀러 입력으로 주어지는 문자열 중 빈도수가 가장 높은 문자열을 출력하는 문제입니다. 빈도수가 동일하면 사전순으로 앞서는 문자열을 출력해야 합니다. Map은 값이 등장한 횟수를 표현하기 좋은 자료구조 입니다. 문제는 쉽지만 배운게 많았습니다. 존재하지 않는 key값으로 get을 하면 null을 반환합니다. Map의 value값을 +=1로 증가시킬 수 없고 다시 put을 해야 합니다. map.put(... 백준알고리즘JAVA_문제풀이JAVA_문제풀이 백준 21610번: 마법사 상어와 비바라기 해당 링크에 위 사진보다 더 상세한 그림 설명이 포함되어 있습니다. 지면관계상 생략했습니다. 주어진 조건에 맞게 구현하는 문제입니다. 2차원 배열을 탐색할 때 다음의 두 가지를 신경써야 합니다. 범위를 넘어갔을 때 다시 반대방향으로 넘어오는 방법 d방향이 음수일 때 인덱싱을 처리하는 방법 조건을 만족하는 값을 구했을 때 그자리에서 바로 값을 변화시켜야 하는지, 모아뒀다가 한번에 처리해야 하는... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 15685번: 드래곤 커브 선분을 조건에 따라 계속해서 확장해 나가는 문제입니다. 조건이란 마지막 끝점을 기준으로 90도 회전시키는 것을 말합니다. 문제의 핵심은 좌표를 90도 회전시키는 것과 개체수가 증가시키는 것입니다. 이전에 으로 좌표회전을 구현했던 적이 있습니다. 이번 문제를 풀어보니 거리를 절대값으로 구하고 + 혹은, -를 하는 게 편하다는 걸 느꼈습니다. (2,3),(9,11)보다 (2,3),(2+7,3+8... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 14890번: 경사로 길이가 L, 높이가 1인 경사로를 통해 길을 지나갈 수 있는지 구하는 문제입니다. 경사로는 일정한 조건으로만 놓을 수 있습니다. 배열을 입력받으면 경사로를 놓을 수 있는지를 판별하는 메서드가 필요하다고 생각했습니다. 경사로의 종류는 2개(올라가는 경사로와 내려가는 경사로)이기 때문에 조건에 따라 다른 경사로를 활용해야 합니다. 경사로를 활용할 수 없는 조건을 잘 판단해야 합니다. 높이차이가 ... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 17142번: 연구소 3 바이러스는 벽을 통과하지 못하며 상,하,좌,우로 움직입니다. 여러 바이러스 중 M개의 바이러스만 활성 상태로 변경합니다. 활성상태의 바이러스는 1초에 한칸씩 확산됩니다. 모든 공간이 바이러스(활성,비활성 구분 없이)로 채워지는 시간을 구해야 합니다. M개의 활성 바이러스를 선택하지 위해 조합을 구현했습니다. 바이러스의 확산을 표현하기 위해 BFS를 구현했습니다. 여러번 실험을 진행해야 하기 ... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 19236번: 청소년 상어 (0,0)에 있는 물고기를 잡아먹고 상어가 들어옵니다. 잡아먹은 물고기의 방향이 상어의 방향이 됩니다. 물고기들이 이동합니다. 1번부터 이동합니다. 인접한 8칸 중 하나로만 이동할 수 있습니다. 현재 자신의 방향을 가장 먼저, 해당 방향으로 위치변경이 불가능할 경우 반시계방향으로 나머지 칸을 검사합니다. 물고기의 이동이 끝난 뒤 상어가 이동합니다. 상어는 자신의 방향에서 먹을 수 있는 물고기... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 17822번: 원판 돌리기 특정 원판들을 회전합니다. 회전 후 인접하면서 같은 수를 제거합니다. 인접하면서 같은 수가 하나도 없다면 평균보다 높은 수는 1을 빼고 평균보다 낮은 수는 1을 더합니다. 1차원 배열의 회전으로 원판을 돌립니다. BFS를 통해 인접하면서 같은 수를 제거합니다. 이때 평소의 BFS와 달리 다음을 유의해야 합니다. 원이기 때문에 board[i][0]과 board[i][M]은 인접한 걸로 처리해야... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 2644번: 촌수계산 촌수관계를 그래프로 나타낼 수 있습니다. 두 사람의 그래프상의 거리를 구하는 문제입니다. 데이터가 인접리스트로 주어졌기 때문에 HashMap을 활용했습니다. 가중치가 없는 그래프의 거리는 BFS의 depth로 구할 수 있습니다. BFS의 너비는 큐의 변화를 생각하면 쉽습니다. 다음과 같은 그래프가 존재하며 1에서 시작하는 경우를 생각해 보겠습니다. 시작 시점의 큐 : [1] // size1 ... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 2636번: 치즈 NxM격자에 0 또는 1의 값이 놓여있습니다. 1은 치즈, 0은 공기 또는 구멍을 의미합니다. 공기에 닿은 면은 녹아 없어집니다. 치즈에 둘러쌓인 0들이 구멍입니다. 핵심은 공기와 구멍을 구분할 수 있어야 합니다. (0,0)이 4방탐색으로 도달할 수 있는 0은 공기, 그렇지 않은 0은 구멍입니다. BFS 과정에서 녹을 치즈를 판별할 수 있는데 그렇게 설계하지 않아 전체 순회를 한번 더 실행했... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 1922번: 네트워크 연결 MST문제입니다. Minimum Spanning Tree(최소신장트리)란 N개의 노드를 연결하는 N-1의 비용이 최소가 되는 간선을 연결한 트리를 얘기합니다. 알고리즘을 모르는 상태에서 저에게 최소비용으로 길을 연결하라고 하면 다음과 같이 생각할 거 같습니다. 비용이 최소가 되어야 하니깐 선분의 개수가 작아야 될 거 같아. 그럼 N개의 선을 연결할려면 N-1개의 선분이 필요하겠지? 그러면 선... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 1500번: 최대 곱 조합으로 접근했다가 시간초과가 났습니다. S가 최대 100, K가 최대 20으로 100C20 = 535983370403809682970이 나옵니다. 중간에 Sum이 S를 넘으면 return하는 조건과 가능한 숫자는 S-K+1이라는 조건을 추가해도 너무 경우의 수가 큽니다. 곱하는 수들의 차이가 적을수록 전체 곱이 커집니다.... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 2239번: 스도쿠 스도쿠를 완성해야 합니다. 백트래킹을 활용할 수 있습니다. (x,y)위치에서 1,2,3,4,5,6,7,8,9 중 가능한 숫자를 넣어보고 다음 숫자를 채우러 갑니다. 스도쿠의 규칙을 벗어나면 다시 되돌아와 다음 숫자를 넣어봅니다. 해당 depth에서 가장 처음 만난 빈칸만 확인하고, 나머지 빈칸은 더 깊은 depth에서 확인하면 됩니다. 유의사항 가지치기를 고려하지 않으면 매우 오랜 시간이 걸... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 14891번: 톱니바퀴 4개의 톱니바퀴가 주어집니다. K번 톱니바퀴를 돌립니다. 회전하는 톱니바퀴 옆에 있는 톱니바퀴는 서로의 맞닿은 부분의 극값이 반대면 회전합니다. 이때 맞닿은 톱니바퀴는 옆의 톱니바퀴와 반대방향으로 회전합니다. List에 톱니바퀴 데이터를 담았습니다. [톱니1,톱니2,톱니3,톱니4] 톱니의 회전, 연쇄회전여부는 반복적으로 활용되는 부분이기 때문에 메서드로 구현했습니다. addfirst,addl... 백준알고리즘JAVA_문제풀이JAVA_문제풀이 백준 1913번: 달팽이 2차원 배열을 원하는 순서대로 순회해 봅시다. 아래 -> 오른쪽 -> 위 -> 왼쪽 -> ...의 움직임이 반복됩니다. 4개가 반복되기 때문에 나머지 연산을 사용하면 효율적입니다. 방향을 바꾸는 경우는 다음과 같습니다. 다음 칸이 board를 벗어날 때 다음 칸에 0 이외의 숫자가 들어있을 때 한번에 직선을 쭉 가는걸로 생각했는데 한칸 씩 생각해야 설계가 더 깔끔하다. 나는 못풀었는데 이게 ... 알고리즘백준JAVA_문제풀이JAVA_문제풀이 백준 1959번: 달팽이2 2차원 배열을 원하는 순서대로 순회해 봅시다. 오른쪽 -> 아래 -> 왼쪽 -> 위 -> ...의 움직임이 반복됩니다. 4개가 반복되기 때문에 나머지 연산을 사용하면 효율적입니다. 방향을 바꾸는 경우는 다음과 같습니다. 다음 칸이 board를 벗어날 때 다음 칸에 0 이외의 숫자가 들어있을 때 while문 안에서의 구현을 이렇게 생각하면 편합니다. 1.일단 board[x][y]를 채웁니다. ... 알고리즘백준JAVA_문제풀이JAVA_문제풀이 백준 10163번: 색종이 각 도형이 최종적으로 보여지는 넓이를 구하는 문제입니다. 격자 크기만큼의 2차원 배열을 만듭니다. 색종이를 붙이는 순서를 활용합니다. 색종이가 붙여진 칸을 해당 색종이 순서로 바꿉니다. (x,y)에 1번 색종이가 붙여진 상태에서 나중에 5번 색종이가 (x,y)에 붙여지면 (x,y)의 값이 1에서 5로 바뀌면서 1번 색종이의 넓이가 1 줄어듭니다. 2차원 배열에서 1~N의 개수가 각 색종이의 ... 알고리즘백준JAVA_문제풀이JAVA_문제풀이 백준 17276번: 배열 돌리기 십자가와 X에 있는 값들을 오른쪽 또는 왼쪽으로 돌려야 합니다. 더미를 이용해 값을 교체합니다. 교체가 되지 않는 값들이 존재합니다. 해당 값들을 돌리기를 완료한 뒤 넣어줍니다.... 알고리즘백준JAVA_문제풀이JAVA_문제풀이 백준 2567번: 색종이 - 2 도형의 둘레를 구하는 문제입니다. 다른 색종이들과 마찬가지로 색종이가 존재하는 곳을 1로, 그렇지 않은 곳을 0으로 표현합니다. 둘레를 1이 접하고 있는 0의 개수라고 생각할 수 있습니다. 하지만 이 로직은 도화지의 끝면에 붙여진 상황을 고려하지 못합니다.(0이 없기 때문에) 이를 고려하는 방법은 두 가지가 있습니다. 도화지 끝면에 달라붙은 경우를 if문으로 처리해 준다. 도화지 밖을 0으로... 알고리즘백준JAVA_문제풀이JAVA_문제풀이 백준 2961번: 도영이가 만든 맛있는 음식 조건을 만족하는 적절한 조합을 찾는 문제입니다. 재료의 개수가 적기 때문에 부분집합으로 풀 수 있습니다. 부분집합은 해당 값 선택 + 재귀함수 그리고 해당 값 선택X + 재귀함수를 통해 구현할 수 있습니다. 선택X를 food(1,0)으로 설정했습니다. 선택 or 선택X가 반드시 들어오기 때문에 depth ==N일때 종료하면 됩니다. 신맛과 쓴맛의 값을 담기 위해 food class를 생성했습... 알고리즘백준JAVA_문제풀이JAVA_문제풀이 백준 3190번: 뱀 사과를 먹으면 몸의 길이가 1 길어집니다. 주어진 조건대로 움직였을 때 몇초 뒤에 벽이나 자신의 몸에 닿는지를 구하는 문제입니다. 이전에 움직였던 좌표들을 뱀의 길이만큼 기억하게 했습니다. 뱀의 길이가 3이면 현재 뱀이 밟고있는 위치는 현재의(x,y), 1초 전의(x,y), 2초 전의(x,y)가 됩니다. turn은 굳이 객체로 사용할 필요 없었던거 같다.... 백준알고리즘JAVA_문제풀이JAVA_문제풀이 백준 14889번: 스타트와 링크 N개의 숫자를 두 개의 그룹으로 나눌 수 있는 가능한 모든 경우의 수를 구하는 문제입니다. 조합을 통해 N개 중 N/2개를 뽑습니다. 한번 더 조합을 활용해 N/2개 중 2개를 뽑아 시너지를 계산합니다. 선택받지 못한 인원의 배열을 쉽게 구하는 법, 뽑은 숫자에서 2개를 추출하는 방법이 효율적이지 못한 것 같음... 백준알고리즘JAVA_문제풀이JAVA_문제풀이
백준 10826번: 피보나치 수 4 피보나치 숫자를 구하는 문제입니다. memoization기법을 사용해 문제를 풀 수 있습니다. 놓치기 쉬운 부분 N이 0일때를 생각해야 합니다. 숫자가 매우 크다는 걸 생각해야 합니다. long으로도 부족합니다. dp[i] = dp[i-1]+dp[i-2] dp[i]=dp[i−1]+dp[i−2]... 백준알고리즘JAVA_문제풀이JAVA_문제풀이 백준 1302번: 베스트셀러 입력으로 주어지는 문자열 중 빈도수가 가장 높은 문자열을 출력하는 문제입니다. 빈도수가 동일하면 사전순으로 앞서는 문자열을 출력해야 합니다. Map은 값이 등장한 횟수를 표현하기 좋은 자료구조 입니다. 문제는 쉽지만 배운게 많았습니다. 존재하지 않는 key값으로 get을 하면 null을 반환합니다. Map의 value값을 +=1로 증가시킬 수 없고 다시 put을 해야 합니다. map.put(... 백준알고리즘JAVA_문제풀이JAVA_문제풀이 백준 21610번: 마법사 상어와 비바라기 해당 링크에 위 사진보다 더 상세한 그림 설명이 포함되어 있습니다. 지면관계상 생략했습니다. 주어진 조건에 맞게 구현하는 문제입니다. 2차원 배열을 탐색할 때 다음의 두 가지를 신경써야 합니다. 범위를 넘어갔을 때 다시 반대방향으로 넘어오는 방법 d방향이 음수일 때 인덱싱을 처리하는 방법 조건을 만족하는 값을 구했을 때 그자리에서 바로 값을 변화시켜야 하는지, 모아뒀다가 한번에 처리해야 하는... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 15685번: 드래곤 커브 선분을 조건에 따라 계속해서 확장해 나가는 문제입니다. 조건이란 마지막 끝점을 기준으로 90도 회전시키는 것을 말합니다. 문제의 핵심은 좌표를 90도 회전시키는 것과 개체수가 증가시키는 것입니다. 이전에 으로 좌표회전을 구현했던 적이 있습니다. 이번 문제를 풀어보니 거리를 절대값으로 구하고 + 혹은, -를 하는 게 편하다는 걸 느꼈습니다. (2,3),(9,11)보다 (2,3),(2+7,3+8... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 14890번: 경사로 길이가 L, 높이가 1인 경사로를 통해 길을 지나갈 수 있는지 구하는 문제입니다. 경사로는 일정한 조건으로만 놓을 수 있습니다. 배열을 입력받으면 경사로를 놓을 수 있는지를 판별하는 메서드가 필요하다고 생각했습니다. 경사로의 종류는 2개(올라가는 경사로와 내려가는 경사로)이기 때문에 조건에 따라 다른 경사로를 활용해야 합니다. 경사로를 활용할 수 없는 조건을 잘 판단해야 합니다. 높이차이가 ... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 17142번: 연구소 3 바이러스는 벽을 통과하지 못하며 상,하,좌,우로 움직입니다. 여러 바이러스 중 M개의 바이러스만 활성 상태로 변경합니다. 활성상태의 바이러스는 1초에 한칸씩 확산됩니다. 모든 공간이 바이러스(활성,비활성 구분 없이)로 채워지는 시간을 구해야 합니다. M개의 활성 바이러스를 선택하지 위해 조합을 구현했습니다. 바이러스의 확산을 표현하기 위해 BFS를 구현했습니다. 여러번 실험을 진행해야 하기 ... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 19236번: 청소년 상어 (0,0)에 있는 물고기를 잡아먹고 상어가 들어옵니다. 잡아먹은 물고기의 방향이 상어의 방향이 됩니다. 물고기들이 이동합니다. 1번부터 이동합니다. 인접한 8칸 중 하나로만 이동할 수 있습니다. 현재 자신의 방향을 가장 먼저, 해당 방향으로 위치변경이 불가능할 경우 반시계방향으로 나머지 칸을 검사합니다. 물고기의 이동이 끝난 뒤 상어가 이동합니다. 상어는 자신의 방향에서 먹을 수 있는 물고기... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 17822번: 원판 돌리기 특정 원판들을 회전합니다. 회전 후 인접하면서 같은 수를 제거합니다. 인접하면서 같은 수가 하나도 없다면 평균보다 높은 수는 1을 빼고 평균보다 낮은 수는 1을 더합니다. 1차원 배열의 회전으로 원판을 돌립니다. BFS를 통해 인접하면서 같은 수를 제거합니다. 이때 평소의 BFS와 달리 다음을 유의해야 합니다. 원이기 때문에 board[i][0]과 board[i][M]은 인접한 걸로 처리해야... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 2644번: 촌수계산 촌수관계를 그래프로 나타낼 수 있습니다. 두 사람의 그래프상의 거리를 구하는 문제입니다. 데이터가 인접리스트로 주어졌기 때문에 HashMap을 활용했습니다. 가중치가 없는 그래프의 거리는 BFS의 depth로 구할 수 있습니다. BFS의 너비는 큐의 변화를 생각하면 쉽습니다. 다음과 같은 그래프가 존재하며 1에서 시작하는 경우를 생각해 보겠습니다. 시작 시점의 큐 : [1] // size1 ... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 2636번: 치즈 NxM격자에 0 또는 1의 값이 놓여있습니다. 1은 치즈, 0은 공기 또는 구멍을 의미합니다. 공기에 닿은 면은 녹아 없어집니다. 치즈에 둘러쌓인 0들이 구멍입니다. 핵심은 공기와 구멍을 구분할 수 있어야 합니다. (0,0)이 4방탐색으로 도달할 수 있는 0은 공기, 그렇지 않은 0은 구멍입니다. BFS 과정에서 녹을 치즈를 판별할 수 있는데 그렇게 설계하지 않아 전체 순회를 한번 더 실행했... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 1922번: 네트워크 연결 MST문제입니다. Minimum Spanning Tree(최소신장트리)란 N개의 노드를 연결하는 N-1의 비용이 최소가 되는 간선을 연결한 트리를 얘기합니다. 알고리즘을 모르는 상태에서 저에게 최소비용으로 길을 연결하라고 하면 다음과 같이 생각할 거 같습니다. 비용이 최소가 되어야 하니깐 선분의 개수가 작아야 될 거 같아. 그럼 N개의 선을 연결할려면 N-1개의 선분이 필요하겠지? 그러면 선... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 1500번: 최대 곱 조합으로 접근했다가 시간초과가 났습니다. S가 최대 100, K가 최대 20으로 100C20 = 535983370403809682970이 나옵니다. 중간에 Sum이 S를 넘으면 return하는 조건과 가능한 숫자는 S-K+1이라는 조건을 추가해도 너무 경우의 수가 큽니다. 곱하는 수들의 차이가 적을수록 전체 곱이 커집니다.... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 2239번: 스도쿠 스도쿠를 완성해야 합니다. 백트래킹을 활용할 수 있습니다. (x,y)위치에서 1,2,3,4,5,6,7,8,9 중 가능한 숫자를 넣어보고 다음 숫자를 채우러 갑니다. 스도쿠의 규칙을 벗어나면 다시 되돌아와 다음 숫자를 넣어봅니다. 해당 depth에서 가장 처음 만난 빈칸만 확인하고, 나머지 빈칸은 더 깊은 depth에서 확인하면 됩니다. 유의사항 가지치기를 고려하지 않으면 매우 오랜 시간이 걸... JAVA_문제풀이백준알고리즘JAVA_문제풀이 백준 14891번: 톱니바퀴 4개의 톱니바퀴가 주어집니다. K번 톱니바퀴를 돌립니다. 회전하는 톱니바퀴 옆에 있는 톱니바퀴는 서로의 맞닿은 부분의 극값이 반대면 회전합니다. 이때 맞닿은 톱니바퀴는 옆의 톱니바퀴와 반대방향으로 회전합니다. List에 톱니바퀴 데이터를 담았습니다. [톱니1,톱니2,톱니3,톱니4] 톱니의 회전, 연쇄회전여부는 반복적으로 활용되는 부분이기 때문에 메서드로 구현했습니다. addfirst,addl... 백준알고리즘JAVA_문제풀이JAVA_문제풀이 백준 1913번: 달팽이 2차원 배열을 원하는 순서대로 순회해 봅시다. 아래 -> 오른쪽 -> 위 -> 왼쪽 -> ...의 움직임이 반복됩니다. 4개가 반복되기 때문에 나머지 연산을 사용하면 효율적입니다. 방향을 바꾸는 경우는 다음과 같습니다. 다음 칸이 board를 벗어날 때 다음 칸에 0 이외의 숫자가 들어있을 때 한번에 직선을 쭉 가는걸로 생각했는데 한칸 씩 생각해야 설계가 더 깔끔하다. 나는 못풀었는데 이게 ... 알고리즘백준JAVA_문제풀이JAVA_문제풀이 백준 1959번: 달팽이2 2차원 배열을 원하는 순서대로 순회해 봅시다. 오른쪽 -> 아래 -> 왼쪽 -> 위 -> ...의 움직임이 반복됩니다. 4개가 반복되기 때문에 나머지 연산을 사용하면 효율적입니다. 방향을 바꾸는 경우는 다음과 같습니다. 다음 칸이 board를 벗어날 때 다음 칸에 0 이외의 숫자가 들어있을 때 while문 안에서의 구현을 이렇게 생각하면 편합니다. 1.일단 board[x][y]를 채웁니다. ... 알고리즘백준JAVA_문제풀이JAVA_문제풀이 백준 10163번: 색종이 각 도형이 최종적으로 보여지는 넓이를 구하는 문제입니다. 격자 크기만큼의 2차원 배열을 만듭니다. 색종이를 붙이는 순서를 활용합니다. 색종이가 붙여진 칸을 해당 색종이 순서로 바꿉니다. (x,y)에 1번 색종이가 붙여진 상태에서 나중에 5번 색종이가 (x,y)에 붙여지면 (x,y)의 값이 1에서 5로 바뀌면서 1번 색종이의 넓이가 1 줄어듭니다. 2차원 배열에서 1~N의 개수가 각 색종이의 ... 알고리즘백준JAVA_문제풀이JAVA_문제풀이 백준 17276번: 배열 돌리기 십자가와 X에 있는 값들을 오른쪽 또는 왼쪽으로 돌려야 합니다. 더미를 이용해 값을 교체합니다. 교체가 되지 않는 값들이 존재합니다. 해당 값들을 돌리기를 완료한 뒤 넣어줍니다.... 알고리즘백준JAVA_문제풀이JAVA_문제풀이 백준 2567번: 색종이 - 2 도형의 둘레를 구하는 문제입니다. 다른 색종이들과 마찬가지로 색종이가 존재하는 곳을 1로, 그렇지 않은 곳을 0으로 표현합니다. 둘레를 1이 접하고 있는 0의 개수라고 생각할 수 있습니다. 하지만 이 로직은 도화지의 끝면에 붙여진 상황을 고려하지 못합니다.(0이 없기 때문에) 이를 고려하는 방법은 두 가지가 있습니다. 도화지 끝면에 달라붙은 경우를 if문으로 처리해 준다. 도화지 밖을 0으로... 알고리즘백준JAVA_문제풀이JAVA_문제풀이 백준 2961번: 도영이가 만든 맛있는 음식 조건을 만족하는 적절한 조합을 찾는 문제입니다. 재료의 개수가 적기 때문에 부분집합으로 풀 수 있습니다. 부분집합은 해당 값 선택 + 재귀함수 그리고 해당 값 선택X + 재귀함수를 통해 구현할 수 있습니다. 선택X를 food(1,0)으로 설정했습니다. 선택 or 선택X가 반드시 들어오기 때문에 depth ==N일때 종료하면 됩니다. 신맛과 쓴맛의 값을 담기 위해 food class를 생성했습... 알고리즘백준JAVA_문제풀이JAVA_문제풀이 백준 3190번: 뱀 사과를 먹으면 몸의 길이가 1 길어집니다. 주어진 조건대로 움직였을 때 몇초 뒤에 벽이나 자신의 몸에 닿는지를 구하는 문제입니다. 이전에 움직였던 좌표들을 뱀의 길이만큼 기억하게 했습니다. 뱀의 길이가 3이면 현재 뱀이 밟고있는 위치는 현재의(x,y), 1초 전의(x,y), 2초 전의(x,y)가 됩니다. turn은 굳이 객체로 사용할 필요 없었던거 같다.... 백준알고리즘JAVA_문제풀이JAVA_문제풀이 백준 14889번: 스타트와 링크 N개의 숫자를 두 개의 그룹으로 나눌 수 있는 가능한 모든 경우의 수를 구하는 문제입니다. 조합을 통해 N개 중 N/2개를 뽑습니다. 한번 더 조합을 활용해 N/2개 중 2개를 뽑아 시너지를 계산합니다. 선택받지 못한 인원의 배열을 쉽게 구하는 법, 뽑은 숫자에서 2개를 추출하는 방법이 효율적이지 못한 것 같음... 백준알고리즘JAVA_문제풀이JAVA_문제풀이