
주의할 점문자열의 문자가 연속되지 않으면서 이미 앞서 해당 문자가 입력된 적이 있을 경우 그룹 단어가 아니다.그룹 단어의 개수를 출력해야 한다.그룹 단어를 체크할 함수이다.26개의 단어를 체크할 길이 26의 boolean 배열을 선언하고 문자열을 입력받는다.(boole

🔔 주의할 점 1\. 단어 길이순으로 정렬한 뒤, 길이가 같을 경우 사전순으로 정렬해야 한다. 2\. 중복되는 단어가 있을 경우 한번만 출력한다.배열을 특정한 규칙에 의해 정렬하고 싶은 경우 Arrays.sort() 메소드에 Comparator을 구현하면 된다.1차

주의할 점나이순 정렬을 기준으로 하되, 나이가 같을 경우 주어진 입력순으로 정렬한다.이때 정렬방법은 Arrays.sort()에 Comparator의 compare 메소드를 구현하여 사용자 정렬을 사용해서 쓸 수 있다. 즉, 나이순으로 정렬하면서 이름은 따로 비교를 안한

백준 25706번 - 자전거 묘기

백준 15705번 - 단어찾기처음엔 상하좌우 및 대각선의 모든 방향을 배열로 저장해서index를 하나하나 증가시켜 문자열을 확인 해야하나 싶었는데굉장히 비효율적이라는 생각이 들었다.그렇다면 주어진 단어의 크기에 맞게 문자열을 만들어 StringBuilder에 추가해 문

백준 21937번 - 작업문제에서 주어진 입력 순서대로 작업 순서를 저장하게 되면dfs 구현시 graph를 2중으로 탐색해야 했다.시간 초과 에러가 떴고작업 순서를 반대로 저장하는 그래프를 구성하여for 반복문 하나를 사용해서 dfs로 탐색하도록 코드를 수정했다.

백준 5638번 - 수문수문의 유량과 비용이 주어지면 일정시간 안에 목표 양을 비워야 한다.combination 함수에 인자로 수문의 유량 \* 주어진 시간을 더한 sum값을 넘겨서 sum이 목표 양보다 크면 비용을 비교하도록 코드를 짰다.재귀함수를 사용해서 결국 mi

🔗 문제 링크 백준 27514번 - 1차원 2048 📝 풀이 처음엔 투포인터가 떠올라서 start, end 인덱스를 두고 두 인덱스가 배열의 크기보다 작을때만 while문을 돌면서 계산을 하도록 코드를 짰다. 하지만 계속해서 런타임에러와 시간초과가 떴다. 수열의

백준 3230번 - 금은동LinkedList의 void add(int index, Object element) 메소드를 활용하면 된다.지정된 위치(index)에 객체를 저장한다.자리에 있던 기존의 데이터는 뒤로 밀려나기만 할 뿐 삭제되지 않는다.ex) add(2, Ob

백준 16510번 - Predictable Queue일반 배열을 두고 배열의 크기만큼 계속 돌면서 누적합을 구하면 시간초과가 뜬다.혁진이가 일할 수 있는 시간을 의미하는 정수 T를 받을때배열에 부분합으로 받아서 이진탐색을 하면 해결된다.

\[백준] 13414번 - 수강신청지켜야 할 규칙1\. 수강신청 클릭 2번 이상 -> 중복 삭제 후 대기열 맨 뒤로2\. 최대 수강 가능 인원 n명의 학번 출력학생들의 학번을 저장할 때중복을 허용하지 않으면서 순서를 보장하는 LinkedHashSet 사용contains

\[백준] 13335번 - 트럭트럭의 무게는 truck 큐에 차례로 추가다리의 길이 만큼 bridge 큐에 모두 0으로 추가bridgeWeight : 현재 다리의 하중큐의 확인 연산 메소드 peek()을 알고있다면 바로 풀 수 있는 문제였다.truck의 무게 + 현재

\[백준] 평범한 배낭처음에 그리디로 풀릴거 같았는데 전혀 풀리지 않았다.알고리즘 분류를 찾아보니다이나믹 프로그래밍배낭 문제이렇게 되어 있었고 "배낭 문제"가 무엇인지 찾아봤다.배낭 문제는 n개의 물건과 각 물건 무게 Weight와 가치 Value가 주어지고, 배낭의

\[백준] 1655번 - 가운데를 말해요숫자를 입력 받을때마다 list로 저장하고 정렬을 수행하게 되면시간 제한이 0.1초로 주어졌기에 시간초과가 뜰 것 같았다.따라서 우선순위 큐를 활용하는 문제라는 것을 파악할 수 있었지만어떻게 써먹어야 할지 떠오르지 않았다..두 개

\[백준] 14888번 - 연산자 끼워넣기숫자와 연산자를 담아둘 배열을 선언하고Math.max, Math.min을 활용해 각 연산의 최댓값과 최솟값을 구하면 된다.그리고 완전탐색을 하면서연산자의 배열에서 해당 인덱스의 연산자가 존재하면값을 1로 감소시키고 0이 된다면

[백준] 2504번 - 괄호의 값 📝 나의 풀이 이 문제를 보자마자 Stack을 활용해야겠다는 생각이 떠올랐다. >‘()’ 인 괄호열의 값은 2이다. ‘[]’ 인 괄호열의 값은 3이다. ‘(X)’ 의 괄호값은 2×값(X) 으로 계산된다. ‘[X]’ 의 괄호값은

\[백준] 14719번 - 빗물Stack을 사용해 원하는 값에 도달할 때까지 기존 값들을 계속해서 쌓아두고,원하는 값이 나타나면 그 순간까지 쌓아둔 값들을 모두 꺼내 처리할 수 있다.벽의 높이가 4, 1, 1, 3, 5로 주어졌다고 가정해 보자.1\. 스택 초기화 및

\[백준] 1062번 - 가르침anta\_\_\_tica단어의 시작은 무조건 anta, 단어의 끝은 무조건 tica그렇기에 탐색할 단어에서 위에 해당하는 알파벳은 제외하고 탐색해야 한다.a ~ z 까지의 26개 알파벳 중 5개를 탐색하지 않음으로써 21개만 탐색하게 된

\[백준] 1700번 - 멀티탭문제를 보고, 가장 오랫동안 사용되지 않을 페이지를 교체하는OPT 교체 알고리즘이 떠올랐다.그리고 3가지 경우의 수를 나누어 생각하면 된다.사용할 전기용품이 이미 멀티탭에 꽂혀 있는 경우 → pass빈자리가 있는 경우 → 빈자리 사용 →

\[백준] 1806번 - 부분합문제를 제대로 이해하지 못해서다른 사람들의 풀이를 참고해서 문제를 풀었다.현재 sum < S 인 경우 오른쪽 끝 원소를 포함하고 right를 증가시켜 슬라이딩 윈도우를 확장한다.현재 sum >= S 인 경우 현재 부분 배열의 길이

\[백준] 1916번 - 최소비용구하기처음 코드를 제출하니 틀렸다고 떴다..최단 거리가 짧은 노드를 구할 때 이렇게 단순 반복문으로 구현했는데이 부분때문에 틀렸다고 하는건가? 하는 생각이 들었다.문제를 다시 읽어보면도시의 개수 N(1 ≤ N ≤ 1,000), 버스의 개

\[백준] 1789번 - 수들의 합위 사진처럼 1부터 차례대로 더한 값이 S보다 커진 경우 반복문을 종료한다.수를 더한 횟수에서 1을 뺀, 즉 count -1 한 값이 정답이 된다.

\[백준] 2667번 - 단지번호붙이기오랜만에 DFS 문제를 풀었더니 헷갈림 투성..연결된 집의 모임인 단지를 정의해야 하기에 모든 위치를 탐색해야 한다 → DFS상하좌우로 연결된 집의 모임 = 단지 → 상하좌우 탐색을 위한 배열 필요각 단지에 속하는 집의 수를 오름차

\[백준] 3085번 - 사탕게임모든 경우의 수를 다 계산해야 하기에 완전 탐색으로 풀어야 한다는 생각은 들었지만..계속 어렵게 생각을 했다....!!! 그래서 안풀렸다.문제에서 주어진 조건을 차근차근 다시 파악해보자.인접한(행, 열) 사탕의 위치를 서로 바꾼다.연속된

\[백준] 17070번 - 파이프 옮기기1 각 방향대로 이동할 때 무조건 빈칸이어야 하는 조건도 잘 성립하도록 주의해야 한다.가능한 모든 방향을 탐색하고, 파이프의 한쪽 끝이 (N-1, N-1)에 도착하면경우의 수를 세는 count 변수를 증가시켜주면 된다.나는

[백준] 1749번 - 점수따먹기 📝 나의 풀이 풀이 순서 입력값으로 누적합 구하기 합이 최대가 되는 부분행렬 구하기 → 완전 탐색 > 2차원 배열에서 모든 가능한 부분 배열의 합을 계산해서 최대 합을 구해야 하기 때문에 (x1, y1)에서 (x2, y2)까지

\[백준] 16954. 움직이는 미로 탈출문제를 보자마자 BFS 라는 것은 파악했으나미로에서 이동하지 못하는 벽이 움직인다는 조건 때문에 많이 헤맸다.캐릭터가 움직인 후, 벽이 움직인다BFS로 다음으로 이동할 경로를 탐색한 후에 벽을 이동하는 함수를 호출해야 하는데 어

\[백준] 11728. 배열 합치기stringbuilder 써라JAVA - StringBuilder와 System.out.print의 속도차이

\[백준] 20922번 - 겹치는 건 싫어문제에서 말하는 연속 부분 수열이연속된 숫자로 이루어진 부분 수열인줄 알고 헤매다가인접한 원소들로 이루어진 모든 부분 집합이라는 것을 뒤늦게 이해해서 이해한 이후에는 쉽게 풀었다.

\[백준] 20366번 - 같이 눈사람 만들래?눈덩이 크기 정렬엘사가 만든 몸통, 머리 눈덩이 선택엘사가 선택하지 않은 눈덩이들을 이용해서 엘사 눈사람의 키와 가장 가까운 값을 가지는 두 눈덩이 선택이 로직이 딱 떠올랐는데 투포인터에 익숙하지 않아서어떻게 구현할지에 대

🔗 문제 링크첫 방문하는 노드가 무조건 root 노드rootIndex + 1 : left의 root 노드rootIndex + 왼쪽 자식노드 갯수 : right의 root 노드왼쪽 자식 노드와 오른쪽 자식 노드의 값과 개수를 알 수 있다.root 노드 왼쪽에 있는 값

\[BOJ] 2422. 한윤정이 이탈리아에 가서 아이스크림을 사먹는데1 ≦ N ≦ 200 범위의 아이스크림 종류 중에서 3개를 선택해야 한다.처음에 nC3 조합을 생각해서 풀었지만 시간 초과가 떴다.당연하다.. 만약 n=200 인 경우에는 1,313,400개 경우의 수

\[BOJ] 14500. 테트로미노정사각형 4개를 이어 붙인 1X1 정사각형은 테트로미노라고 하며, 다음과 같은 5가지가 있다.각 지점마다 만들 수 있는 도형을 탐색하면 된다.사실 처음에는 테트로미노를 회전/대칭한 형태를 하드코딩 해야하나.. 싶었다.<span s
\[정올] 동전 자판기(下)전체 동전의 총 금액 - 구입하려는 물건의 값(W)이 차액을 최소한의 동전의 개수로 만들어야 한다.남은 동전의 수가 자판기에서 사용할 수 있는 최대 동전의 수가 되는 것이다.예를 들어, 문제에서 주어진 테스트케이스에서동전의 총 금액이 2679

\[BOJ] 17471. 게리맨더링선거구를 나누기 위해 부분집합을 활용하는 것 까진 파악 완료연결된 노드끼리만 부분집합으로 구현하던 중에 단단히 꼬였다.그리고 각 선거구에 포함된 구역끼리 인접하는지 확인하기 위해 <span style='background-colo

\[BOJ] 12891. DNA비밀번호1년 전에 풀었던 문제인데부분 집합으로 접근했다가 시간 초과가 떴고, 투포인터로 풀었다.DNA 문자열에서 특정 부분 문자열이 주어진 조건을 만족하는지 확인하는 문제다.주어진 부분 문자열의 길이 P와 DNA 문자열의 길이 S가 주어지

\[BOJ] 1339. 단어 수학주어진 단어들에서 각 문자에 숫자를 할당하여 최대 합을 구하는 문제이다.알고리즘: 이 코드는 그리디(greedy) 알고리즘을 사용하여 가장 높은 가중치를 가진 문자에 높은 숫자를 할당하는 방식이다.로직:각 문자가 해당 위치에서 가지는 가

\[BOJ] 2212. 센서문제에서 K개의 집중국을 설치할 수 있다고 했을 때, K개의 집중국을 설치하면 K개의 독립된 구간(각각의 구간이 하나의 집중국에 의해 커버되는 구간)을 만들 수 있다.센서가 쭉 나열되어 있고, 이를 K개의 집중국으로 커버하려고 한다. 각 집중

\[BOJ] 8980. 택배여러 구간을 지나가는 택배를 최대한 많이 배송해야 한다.각 구간(도착지 - 출발지)에 대해 트럭에 얼마의 택배가 실릴 수 있는지 추적해야 한다.택배를 도착지 기준으로 정렬도착지가 빠른 순서로 택배를 처리하면, 현재 트럭에 실린 택배를 조기에

\[BOJ] 10026. 적록색약DFS를 이용한 구역 탐색각 구역을 DFS(깊이 우선 탐색) 방식으로 탐색하여 방문한 구역을 체크하고, 새로운 구역을 발견할 때마다 구역 수를 증가시킨다.맵 변환을 통한 적록색약 시뮬레이션적록색약의 경우 'R'과 'G'를 구분하지 못하기

\[BOJ] 1987. 알파벳모든 가능한 경로를 탐색한 뒤 그 중 가장 길이가 긴 것을 선택하는 것이기 때문에 DFS를 사용했다.(0,0)에서 출발해 상하좌우로 이동한다.이때, 보드의 범위를 벗어나거나 이미 방문한 알파벳인 경우는 건너뛴다.이동이 가능하고 방문하지 않은

\[BOJ] 7576. 토마토시작 정점이 여러개인 BFS큐 초기화 (여러 시작점 설정)BFS 탐색 전, 익은 토마토(값이 1인 경우)의 위치를 모두 큐에 추가한다. BFS를 통한 토마토 익히기큐에서 익은 토마토의 위치를 하나씩 꺼내고, 그 위치에서 상하좌우로 이동 가능

\[BOJ] 13023. ABCDE

\[BOJ] 15686. 치킨 배달백트래킹 + 조합 문제집의 위치와 치킨집 위치를 ArrayList<int\[]> 에 따로 저장했다.도시에 있는 치킨집 중에서 최대 M개를 조합으로 선택한다.모든 집에 대해 M개의 치킨집 중 최단 거리를 계산한다.

\[BOJ] 2623. 음악프로그램위상정렬 알고리즘 !!문제에서 여러 가수들의 공연하는 순서를 결정해야 한다.하지만 보조 PD들이 정해둔 가수들 사이의 순서 조건에 성립하도록 해야하므로 위상 정렬 알고리즘을 사용해야 한다.진입 차수가 0인 정점(시작 정점)를 큐에 모두

\[BOJ] 15961. 회전 초밥윈도우를 한 칸씩 오른쪽으로 이동시키면서, 왼쪽 끝의 초밥을 제거하고 오른쪽 끝의 초밥을 추가한다.이 과정에서 초밥 종류도 갱신 해야한다.매번 윈도우 이동 후, 쿠폰으로 제공되는 초밥이윈도우에 포함되지 않는 경우를 고려해 최대 종류 수

\[BOJ] 4485. 녹색 옷 입은 애가 젤다지?다익스트라 알고리즘을 사용해 시작 지점에서 목표 지점까지의 최소 비용 경로를 찾아야 한다.문제에서 비용은 각 위치의 루피 값으로 한다.우선순위 큐 사용방문해야 할 위치들을 관리하기 위해 우선순위 큐를 사용한다.큐에서 비

\[BOJ] 1463. 1로 만들기목표는 숫자 X에서 1까지 가는 최소한의 연산 횟수를 구하는 것이다.각 숫자에 대해 연산을 할 수 있는 경우를 고려해서 최소 연산 횟수를 저장해야 한다.이 과정을 상향식(bottom-up)으로 풀 수 있으며, 메모이제이션을 통해 중복

\[BOJ] 2615. 오목여섯 알 이상이 연속적으로 놓인 경우에는 이긴 것이 아니다.검은색이 이겼을 경우 1 출력흰색이 이겼을 경우 2 출력아직 승부가 결정되지 않았을 경우 0 출력 0 출력 안해서 틀리고 있었따...(0, 0)에서 부터 바둑알이 있는 좌표에서 부터

[BOJ] 1600. 말이 되고픈 원숭이 📌 풀이 과정 >이 문제의 핵심은 3차원 방문 배열을 사용하는 것이다. 그리고 BFS를 활용할 때 좌표뿐만 아니라 현재 상태를 모두 포함해서 관리해야 한다. 💡 BFS에서 상태를 관리하는 방법 보통 BFS는 2차원 좌

\[BOJ] 1941. 소문난 칠공주선택된 좌표는 2차원 배열의 인덱스를 1차원 인덱스로 변환하여 princess\[] 배열에 저장한다.선택된 자리가 임도연파(Y)인 경우, doyeon 값 증가 시킨다.만약 doyeon 값이 3을 초과하면 해당 경로는 유효하지 않다.

\[BOJ] 3079. 입국심사우리가 구하고자 하는 시간의 범위는 최소 1초부터 시작하여, 가장 오래 걸리는 심사관에게 모든 사람이 심사를 받을 경우의 시간인 최대 시간 = 가장 오래 걸리는 심사 시간 \* 사람 수로 설정할 수 있다.각 심사대에서 주어진 시간 동안 몇

\[BOJ] 1446. 지름길고속도로는 지름길이 없을 때, 1km씩 이동하는 기본 경로를 설정해야 한다.고속도로는 기본적으로 매 구간마다 1km씩 이동하는 경로로 이루어져 있다. 지름길이 없는 경우에는 단순히 고속도로를 따라 1km씩 이동해야 하므로, 기본 경로를 1k

\[BOJ] 1507. 궁금한 민호이 문제는 플로이드-와샬 알고리즘을 사용하여 도시 간의 최단 거리를 이미 구해놓은 상태에서, 그 정보를 바탕으로 실제 최소 도로의 개수와 총 도로 시간의 합을 계산하는 문제이다.문제를 해결하는 핵심은 플로이드-와샬 알고리즘을 역으로 이

\[BOJ] 12933. 오리quack 순서를 나타내는 문자열의 인덱스는 0부터 4까지이며각 인덱스는 q=0, u=1, a=2, c=3, k=4를 의미오리 상태를 저장하는 리스트는 각 오리가 "quack"에서 어디까지 소리를 냈는지를 가리킨다. 리스트의 각 원소는 오리