
가장 기본적인 입력 클래스이다. Scanner의 입력 메서드는 다음과 같은 종류가 있다. 위에서 알아본 Scanner과 출력 시 일반적으로 사용되는 System.out.println(””)은 시간 소모가 심하다는 단점이 존재한다. 따라서, BufferReader를 사용
FIFO(First In First Out)이라는 말 처럼 처음 들어온 데이터가 제일 먼저 나가게 되는 자료구조이다.FIFO 구조이다.한 쪽 끝은 front로 정하여 삭제만 수행한다.반대 쪽 끝은 rear로 정하여 삽입만 수행한다.그래프의 너비우선탐색에 사용된다.자바에

실버3 난이도의 그리디로 분류되어 있는 문제였다. DFS/BFS를 공부하고 있어서 그래프 이론 분류의 문제를 풀며 공부 중이었는데 잘못 눌러서 들어갔고, 문제를 읽어보고 이상하다 싶었는데 그리디 분류에 들어갔던 것이다.😅처음 본 건데, 서브태스크라는 항목이 있어서 정

그래프 이론 분류의 실버 1 난이도 문제이다. 문제를 읽고 "최소의 칸 수"를 구하는 프로그램이라는 단어를 보고, 전에 DFS/BFS 이론을 공부할 때 BFS가 최단거리를 구하는 문제에서 유리하다고 했던 것이 생각나서 바로 BFS 알고리즘을 생각하였다. 미로를 표시하기

그래프 이론 분류의 실버 1 난이도 문제이다. 가장 빠른 시간을 구하라는 조건을 보고 BFS로 풀어야겠다는 생각은 들었지만 풀이에 대한 감이 안잡혀 다른 분의 풀이를 확인하고 풀었다. 참고(https://velog.io/@leeinae/Algorithm-%E

실버2 난이도의 그래프탐색 문제이다. 정점과 간선의 정보들을 이차원 배열에 저장한다.연결되어 있는 정점의 경우 배열의 값을 1로 저장한다.visited 배열을 boolean 타입으로 선언 후 초기화한다. 정점의 개수 N만큼 visited 배열에서 반복문을 돌며 방문하지

구현으로 분류되어 있던 실버4 난이도의 문제이다. 처음에는 문제가 이해가 잘되지 않았다. 예제의 경우 원형으로 앉아있고, 처음에 3번째 사람을 제거하면 다음에는 1,2,4,5,6,7 순서이므로 4번째 사람이 제거되어야하지 않나? 라는 생각이었다. 천천히 예제를 보며 생

잡담: 중간고사 이후, 19학번 동기들과 코테 스터디를 하기로 했다.스터디를 만든 형이 개념적인 부분을 설명해주고 그 형이 고른 문제들을 일주일에 최소 3문제씩 풀기로 했다. 실버1 난이도의 그래프 탐색 문제이다. 기본적인 BFS문제인데 한창 BFS를 안풀다가 오랜만에

난이도 골드4의 그래프탐색/구현 문제이다. 처음에 문제를 읽어보고, 생각해낸 풀이 방법은 다음과 같다. (0,0) 부터 BFS를 돌린다.기본적인 BFS의 로직의 인접한 노드를 방문하지 않았고, 인접한 노드가 방문 가능한 노드일 경우 큐에 인접노드를 추가하는 부분을 방문

처음에는 BFS를 이용해서 각 치킨집과 각 일반집 사이의 최단 거리를 BFS를 이용해서 구해서 더하고 어떻게 해서 풀어야겠다고 생각했는데, 도저히 감이 안잡혀서 다른 분들의 풀이를 조금씩 보면서 풀이했다. 결국은 백트래킹을 사용해서 생각보다 간편하게 해결할 수 있는 문

골드 4 난이도의 문제이다. 이전에 푼 문제와 비슷한 유형의 문제라서 생각보다 간단하게 해결할 수 있었다. 벽을 세울 위치는 조합을 통해 구성한다.구성한 벽의 위치를 토대로 입력값인 originMap(원본)을 복제한 afterMap에 새로 세울 벽을 표시해준다. 벽이

처음에는 단순하게 익은 토마토에서부터 BFS를 돌면서 count를 1씩 증가시키면 된다고 생각했었는데, 처음에 익은 토마토가 여러 개일 경우 이 방법은 사용할 수 없었다. 그래서 두번째로 생각한 방법은 BFS를 할 때 익은 토마토를 모두 큐에 넣고 시작하는 거 였는데

다익스트라를 사용하는 최단거리를 구하는 문제이다. 인접리스트를 사용하여 풀이하였다. 정점의 개수만큼 비어있는 리스트를 선언한다. 시작 정점으로부터 특정 정점까지의 거리를 저장하는 dist 배열을 선언하고 초기값으로 정수형 최댓값을 넣어준다.우선 순위 큐를 사용하기 위해

코드트리\[이상한 진수]백준에서만 알고리즘 문제를 풀다가 처음으로 코드트리에서 문제를 풀어보았다. 브론즈1 난이도의 문제인 거 같았다.알고리즘 분류는 완전탐색이다. a에서 한 숫자만 바꿨을 때 나올 수 있는 수를 십진수로 변환하여 Set에 저장한다. b도 위 방법과 같

CodeTree 아름다운 수열실버4 난이도의 문제이다. A에서 길이가 m인 부분수열을 뽑아 저장한다. 위 부분수열을 오름차순으로 정렬한다. 정렬된 부분 수열의 각 인덱스의 요소와 B의 각 인덱스의 요소 값의 차가 모두 같을 경우 부분수열 첫번째 요소의 A에서의 인덱스

CodeTree Carry 피하기두 수를 더했을 때 Carry가 발생하는지 확인하기 위한 메서드를 정의한다. 두 변수를 10으로 나눈 나머지를 더하여 10보다 커지는지 확인하고 두 변수를 10으로 나눈 몫으로 각각의 변수를 업데이트한다. 하나의 변수라도 0이 될 때까지

Temp Body

방 번호입력값인 방번호를 String 타입으로 저장한다.크기가 10인 int형 배열을 선언 및 초기화한다. String 타입으로 저장한 방번호를 toCharArray() 메서드를 사용해서 문자 배열로 만들어준다. 그 배열을 반복문을 돌면서 (해당 문자 - '0')으로

두 수의 합시간복잡도에 대해 한 번 더 공부하고 푼 문제라서, 위 코드처럼 이중 for문을 사용하여 풀이를 하면 시간복잡도가 O(n^2)이고 n의 최대 100,000이기 때문에 시간초과가 날 것이라고 생각했다. 역시나 제출을 하니 시간초과가 떴다. 바킹독 배열 강의에서

1406번 에디터삽입과 삭제가 가능해야하므로 LinkedList를 사용해서 풀이를 하였다. 초기에 주어지는 문자열의 길이를 구해서 cursor를 초기화해준다.\-> 문자열의 길이가 아닌 list로 문자열의 각 문자를 넣은 후 list의 크기를 구하여 cursor를 초기

5397번 키로거1406번 에디터 문제와 굉장히 유사해서 빠르게 풀 수 있었다. 입력되는 문자열을 char타입 배열에 문자를 하나씩 저장하고, 차례대로 확인하며 문제에서 요구하는 동작을 하도록 구현하였다. stack을 두 개 사용해서 왼쪽의 스택과 오른쪽의 스택 사이에

탑스택을 세 개 선언한다. origin에 입력되는 탑들을 저장한다.origin.pop()으로 마지막 탑을 뽑고, 그 다음 탑의 높이를 peek() 해서 비교하고 pop()한 탑의 높이보다 낮을 경우에는 temp 스택으로 push, 높을 경우에는 해당 탑의 인덱스를 re

17298번 오큰수바킹독 문제집에 Stack 분류로 되어있어서 스택을 사용해서 풀어야한다는 건 알겠는데.. 도저히 어떻게 풀어야하는지 감이 잡히지 않아 다른 사람들의 풀이(코드x)를 본 후 코드로 구현하였다. 풀이 안봤으면 절대 못풀었을 듯한 느낌.. 골드 문제부터는

회전하는 큐원소를 뒤 뿐만 아니라 앞에도 넣을 수 있어야하기 때문에 자료구조 Deque의 개념을 사용해서 풀이하면된다. 하지만 2, 3번 연산을 최소화하기 위해서 찾고자 하는 원소가 전체 원소 중에서 중간을 기준으로 왼쪽에 위치해있는지 오른쪽에 위치해있는지 인덱스를 통

문제 링크(https://school.programmers.co.kr/learn/courses/30/lessons/340213현대오토에버 코딩테스트가 예정되어 있어서 연습할 겸 프로그래머스 문제를 풀기로 했다.난이도가 백준 실버~골드4, 소프티어 3레벨, 프로

문제 링크오토에버 코테를 소프티어로 본다고 해서 연습할 겸 풀었다. 코테가 레벨3 수준이라는데 너무 쉬운 문제 아닌가 싶었다. 입력 받은 성적들을 배열에 저장하고 구간 범위 내에 점수들의 평균을 구한다. 소수점 둘째자리까지 출력하는걸 몰라서 구글링 후 풀이했다. n에

문제 링크이전 글에서 레벨3인데 쉽다했더니 바로 어려운 문제를 맞닥뜨렸다. 길찾기라는걸 봐서는 대충 DFS나 BFS를 활용해서 풀면 되겠거니 싶었다. 그래서 처음에는 S에서 T로 가는 길, T에서 S로 가는 길을 구해서 겹치는 것들을 모두 구하면 되지 않을까 싶었다.

문제 링크dp 문제로 유명한 배낭문제와 유사하지만 귀금속을 잘라 크기를 조절할 수 있기 때문에 더 간단한 문제이다. 그리디 알고리즘을 사용하여 풀이하면 된다. 금속 클래스를 정의하고 리스트에 담은 후 무게당 가격이 비싼 순서대로 정렬한다. 남은 배낭 무게와 금속의 무게

문제 링크문제에서는 서로 다른 위치에서 동시에 출발을 하는 것으로 적혀있어 이 부분을 어떻게 해야할 지 많은 고민이 되었다. 고민을 하다보니 그냥 동시에 출발한다고 생각하지 않고, 한 명이 먼저 출발을 한 후에 3초 동안 수확할 수 있는 최대 값을 구하고 방문 처리를

문제 링크대표적인 그리디 알고리즘을 사용하여 풀 수 있는 문제이다. 강의 종료시간을 기준으로 오름차순으로 정렬 후, 현재 시간(이전에 선택한 강의 종료시간)보다 강의 시작시잔이 작으면 선택하지 않고 같거나 클 경우 선택하면 된다.
문제 링크조건이 약간 더해진 백트래킹 문제이다. 꼭 들려야하는 중간 지점들을 순서대로 방문해야한다. 방문한 노드가 들려야하는 중간 지점에 해당하면 그 노드부터 dfs를 다시 돌린다. 이 때, 이미 방문한 중간 지점이 아닌 다음 중간지점을 방문해야하므로 중간지점 인덱스를

문제 링크입력으로 들어오는 값이 중앙값이 되는 경우의 수를 구하기 위해서는 우선 자동차 연비들을 배열에 저장 후, 오름차순 혹은 내림차순으로 정렬한다. 그리고 중앙값이 되어야하는 값의 인덱스를 찾은 후에 그 값보다 작은 인덱스를 가지는 요소 개수와 그 값보다 큰 인덱스

문제링크스택을 활용하는 대표적인 문제인 수식의 괄호쌍 문제로 약간의 응용이 필요한 문제이다. 레이저가 등장하는 순간 스택에 있는 여는괄호의 수가 생성되는 쇠막대기 조각 수를 의미한다. 1\. 여는 괄호가 나오면 stack에 push 한다. 2\. 닫는 괄호가 나오면 레

문제링크보통 문제들과 달리 M과 N이 반대로 주어진다는 점만 잘 고려하면 쉽게 풀 수 있는 문제이다. 주어지는 직사각형의 좌표에 따라 이차원 배열에 1로 표시해주고, 이중반복문을 통해 표시되지 않은 부분(0)에서는 BFS를 통해 영역의 넓이를 구하였다. bfs를 돌 때

문제링크문제에 적힌 세가지 조건을 만족하는 n번째 계단에 도달할 수 있는 방법을 점화식으로 세운다. 1\. 두 계단 아래에서 올라오기: n-2 → n2\. 한 계단 아래에서 올라오기: 이 경우에는 한가지 더 생각을 해야한다. 2번 조건인 "연속된 세 개의 계단을 모두

문제링크주어지는 좌표를 origin 배열에 저장한다. origin 배열에서 중복을 제거하고 오름차순으로 정렬한 새로운 배열 temp를 만든다. temp 배열에서 이분탐색을 통해 target의 인덱스를 반환한다. 중복을 제거하고 정렬하였기 때문에 반환되는 인덱스가 곧 압

코딩테스트를 대비하며 배열을 다루는데 헷갈리는 것들을 정리하는 글입니다. Arrays.stream()배열을 스트림으로 변환한다. 스트림(Stream)은 데이터의 흐름을 추상화한 것으로, 원본 데이터를 변경하지 않고 데이터를 처리하거나 변환할 수 있는 기능을 제공한다.
문제링크 풀이 처음에는 x,y,z의 조합을 전부 구해서 합을 구한 후에, u 배열에서 이분탐색을 통해 값을 찾으려고 했다. 하지만 그렇게 풀이하게 되면 N이 $1000^3$이 되며 시간초과가 나버린다. 다른 풀이를 생각해보려했지만 도저히 생각이 안나서.. 찾아본

문제링크hashSet을 사용해서 출입여부가 enter이면 추가하고, leave이면 삭제한다. 그 후 남아있는 값들을 ArrayList에 저장 후 정렬한다. 역순으로 출력하면 정답을 얻을 수 있다.

문제링크문제가 굉장히 길지만 위에 부분은 굳이 읽지 않아도 된다. 해시맵은 key를 통해 value를 찾을 때 시간복잡도가 O(1)이지만 containValue() 메서드를 사용할 경우 내부적으로 반복문을 통해 찾기 때문에 시간초과가 발생한다. 따라서 해시맵에 포켓몬의

문제링크상근이의 동기들 친구관계를 인접리스트로 관리한다.초대할 동기를 기록하기 위해 n+1 크기의 invited 배열을 선언한다. 1번(상근이)과 친구인 동기들을 true로 바꿔주고, 그 친구들의 친구까지 true로 바꿔준다. 이렇게 되면 1번(상근이)도 true인 상
플로이드와샬 알고리즘을 사용하는 굉장히 기본적인 문제이다. 분명 알고리즘 수업시간에 배운 기억은 있는데 뭐였는지는 잘 기억이 안나 찾아보았다. 간략히 말하면 플로이드와샬 알고리즘은 모든 정점에서 모든 정점으로의 최단 경로를 구하는 알고리즘이다. 기본적으로 DP를 사용한
문제링크 풀이 문제를 다 읽어보면, 점수가 가장 작은 사람이 회장이 된다는 문장이 약간 어색하다. 점수가 제일 작은데 왜 회장이지? 하지만 결국엔 점수가 작다는 것은 모든 회원들과 가장 가까운 관계를 가지고 있다는 것을 의미한다. 모임의 각 회원의 점수를 구해야하는데, 점수는 곧 가장 가깝지 않은 회원과의 거리가 된다. 따라서 각 회원마다 다른 모든 회...

문제링크이전 N과 M 문제 시리즈를 풀었다면 간단하게 해결할 수 있는 문제이다. 비내림차순이라는 것은, 오름차순이면서 같은 숫자 사용을 허용한다는 뜻이다. 즉 중복허용이 된다는 것.백트래킹 메서드(사실상 백트래킹은 아니고 완전탐색)에서 재귀 호출시 현재 사용할 수인 반
문제링크(https://school.programmers.co.kr/learn/courses/30/lessons/340211최근에 백준만 풀다가 오랜만에 프로그래머스를 푸니 좀 많이 어려웠다..백준만 풀어서 그런게 아니라 쉬운 백준만 풀어서겠지만..빡구현 문제

문제링크n이 최대 100이기 때문에 완전탐색으로 풀이해도 시간이 충분하다. 주어진 집들의 난로 반지름을 배열에 저장 후, 2부터 100까지 반복문을 돌면서 난로 반지름과 모듈러 연산을 하여 0인 경우에는 count를 증가시킨다. 연탄의 반지름에 대하여 모든 난로 반지름

문제링크지도가 정사각형이므로, 단계별로 가로선 혹은 세로선에 점이 몇개인지 확인을 해보면 규칙을 찾을 수 있다. 1단계: 3 \* 32단계: 5 \* 53단계: 9 \* 94단계: 17 \* 17📌 규칙어떤 단계의 한 가로선에 있는 점의 개수는 (전 단계의 가로선에

문제링크회원들의 번호와 들 수 있는 무게는 배열에 저장한다. isBest라는 boolean 배열을 선언하고 true로 초기화해준다. 회원 간의 친분 관계는 인접리스트를 통해 저장한다.각 회원마다 반복문을 돌면서 친분이 있는 회원과의 역기 무게를 비교하는데, 작거나 같으

문제링크참가자들의 번호와 점수를 저장하기 위해 Participant 클래스를 정의한다. 점수 내림차순으로 Participant 배열을 정렬한다. 순위를 정하기 위해 참가자 수 크기의 int형 배열을 선언한다. 정렬된 배열에서 참가자의 번호를 rank배열에 순서대로 저장

보다시피 문제 이름이 플로이드이기 때문에 플로이드와샬 알고리즘을 사용하여 풀이하는 문제이다. 주의해야할 점이 몇가지 있었다. 다른 도시를 경유하지 않고 출발점에서 도착지로 바로 가는 노선(입력 값)이 여러 가지일 수도 있기 때문에, 입력을 받으면서 mapi에 저장된 값

문제링크이전에 플로이드 문제를 풀어서 그런지 이 문제를 보자마자 똑같은 문제 아니야? 하고 같은 방법으로 풀었다가 바로 틀려버렸다. 일단 시간제한도 0.5초로 굉장히 짧다. 우선순위 큐를 사용한 다익스트라를 사용해서 풀이하였다. 해당 알고리즘을 완전히 이해하고 구현할

문제링크다익스트라 알고리즘에 익숙해지기 위해서 최소비용 구하기를 풀고나서, 바로 풀이하였다.이 문제는 출발지(A)에서 목적지(B)까지 이동하는 최소 비용뿐만 아니라, 해당 경로와 거치는 도시의 개수까지 출력해야 한다.이를 해결하기 위해 기존의 다익스트라 알고리즘을 변형

문제링크숨바꼭질 문제는 앞으로, 뒤로, 순간이동이 모두 1초가 걸리기 때문에 BFS 메서드 내에서 현재 위치가 동생의 위치에 도달하면 그 순간의 시간을 반환하고 종료하면 된다. 하지만 이 문제는 순간이동은 시간이 0초 걸리기 때문에 동생의 위치에 도달했다고 바로 메서드

문제링크동쪽 M개의 사이트에서 n개를 고르면 된다. 중복이 있으면 안되고, 순서를 고려하지 않고 뽑는 것이므로 조합에 해당한다.조합의 공식은 다음과 같다. $nCr$ = $n!\\over n!(n-r)!$$nCr$ = $(n-1)C(r-1) + (n-1)Cr$

문제링크상어의 크기 > 물고기의 크기: 이동할 수 있고 물고기를 먹는다. 상어의 크기 = 물고기의 크기: 이동할 수는 있지만 먹을 수 없다. 상어의 크기 < 물고기의 크기: 이동할 수 없고 먹을 수 없다.더 이상 먹을 수 있는 물고기가 없다 -> 종료큐를 이용해서
문제링크 풀이 dp 배열에 가로 n번째까지 타일을 채울 수 있는 최대 방법의 수를 저장한다. 세가지 종류의 타일을 각각 가로(12), 세로(21), 정사각형(2*2)라고 칭하겠다. n = 1 일 때, 직사각형의 크기가 2*1 이므로 세로 타일 하나만 채울 수 있

문제링크코테를 많이 경험해보진 않았지만 아무래도 확실히 그래프, bfs/dfs가 많이 나오는 거 같아서 엠로 코테를 보기전에 벼락치기로 백준에 있는 bfs+dfs 필수문제를 풀어보았다. 그 중 마지막 문제인데 오랜만에 골드 난이도를 답을 보지 않고 풀어냈다...사실 특

문제링크바킹독 백트래킹 문제집의 N과 M 시리즈를 먼저 풀고 이 문제를 풀이하면 쉽게 풀이할 수 있다. N과 M 시리즈처럼 기본적인 백트래킹 알고리즘을 풀이하되, 암호가 모음 최소 1개, 자음 최소 2개 사용되었다는 조건을 만족할 때만 출력해주면 된다.그리고 암호는 증

문제링크첫번째 풀이는 해시를 사용한 완전 탐색 풀이다. HashSet을 선언 후 전화번호부에 있는 모든 번호를 set에 저장한다. 현재 전화번호의 길이를 1 ~ 전화번호길이 까지 substring으로 자르며 잘려진 전화번호를 map이 key로 가지고 있는지 탐색한다.

BFS방식으로 풀이한다. 경로에 유사도가 k보다 작은 값을 포함시키면, 해당 경로로 이어진 영상들의 유사도는 k보다 작아지므로, 큐에 포함시키는 영상의 조건은 <방문한적이 없고, 유사도가 k보다 크거나 같다> 이다.

문제링크(https://school.programmers.co.kr/learn/courses/30/lessons/42586(100 - 작업진도) / 작업속도의 결과 값을 올림 연산하여, 각 작업이 완료되기까지 걸리는 일수를 계산한다.이 값을 차례대로 큐(Que

실제 코딩테스트를 많이 경험하진 못했지만, 비트마스킹 문제가 DFS/BFS 못지 않게 빈출 유형인 거 같아서 익혀둬야겠다는 생각이 들었다. 그래서 풀어본 완전 기본 문제. 사실 비트마스킹에 대한 개념이 거의 없었다고 봐도 무방해서, 간단하게 개념만 보고 풀이하였다. 비

지민이가 가지고 있는 막대의 길이를 모두 더한다. 처음에는 64cm 막대 하나만 가지고 있다. 이때, 합이 X보다 크다면, 아래와 같은 과정을 반복한다.가지고 있는 막대 중 길이가 가장 짧은 것을 절반으로 자른다.만약, 위에서 자른 막대의 절반 중 하나를 버리고 남아있
풀이 연주할 수 있는 노래를 체크하는데에 비트마스킹을 사용한다. 입력으로 주어지는 각 기타로 연주할 수 있는 노래 문자열을 long형으로 변환한다. 'Y'는 1로, 'N'은 0으로 치환하여 나온 결과(이진수)를 십진수로 변환한다. 완전 탐색으로, 모든 조합을

DFS를 사용한 브루트포스최소한 하나 이상의 재료를 선택해서,|신맛 - 쓴맛|의 최솟값을 구해야 한다.재료 목록을 ArrayList에 저장한다.DFS(깊이 우선 탐색)으로 각 재료를 선택하거나, 선택하지 않거나의 두 경우로 나누어 진행한다.→ 총 $2^n$가지의 조합을

문제링크다익스트라시간복잡도: O(E logV) = O($3\*10^5$ log $10^6$) = O($10^7$) ~ O($10^8$)다익스트라 알고리즘으로 x로부터 다른 모든 지점까지의 최단거리를 구한다. BFS시간복잡도: O(E + V) = O($3\*10^5 +

문제링크DFS시간복잡도: O($2^n$)n개의 숫자가 있고, 각 숫자마다 더하거나 빼거나 두가지로 분기되기 때문이다. 재귀를 사용해서 DFS를 구현하는 기본적인 문제이다. 각 정수마다 더하거나, 빼거나 두 가지의 분기로 나뉘어 DFS를 수행한다. 모든 숫자를 사용했을

문제링크다리를 길이 w인 큐(Queue)로 보고, 트럭이 다리 위를 한 칸씩 "이동"하며 다리 위 총 무게가 l 이하일 때만 트럭이 올라갈 수 있도록 시뮬레이션한다.초기 상태는 아무것도 올라오지 않은 상태이므로 큐에 다리길이만큼 0을 넣어준다. 그리고, 통과된 트럭이

문제링크어떤 집에 공유기를 설치할 지에 대해서 이분탐색으로 접근하면 안되고, 구해야하는 인접한 두 공유기 사이의 최소 거리를 이분탐색으로 접근해야한다. 최소거리를 미리 지정하고, 그 상황에서 최대 몇 개의 공유기를 설치할 수 있는지 구한다. 설치 가능한 공유기 수가 가

문제링크공유기 설치를 먼저 풀고 나니 쉽게 풀린 문제이다. 전형적인 이분탐색 문제라는 것을 알 수 있다. 지급 예산 총합을 계산하는 메서드 구현우선, 특정 상한액 val이 주어졌을 때, 각 지방에 지급할 수 있는 총 예산 금액을 계산하는 메서드를 구현한다.요청 예산이

문제링크세로 조작가로 조작과 상관 없이 A가 아니면 무조건 해줘야하는 조작이므로 우선 계산해준다. 'A'에서 위로 조작하여 변경하는 방법과 아래로 조작하여 'Z'로 돌아가서 변경하는 방법 중 적게 조작하는 방법을 더해준다.가로 조작가로 조작 부분은 구현도 까다롭고, 처

문제 링크두 개의 집합 중 어느 집합에 속하는지 표시하기 위해 colors라는 배열을 사용한다. 0은 색칠되지 않은 것이고 1, -1 두가지 표시가 존재한다. 아직 색칠되지 않은 정점부터 BFS를 수행한다. BFS 과정에서 현재 탐색하고 있는 정점과 인접한 정점들이 아

문제 링크틀린 첫번째 풀이처음에 접근한 방식은 배열의 각 숫자들을 문자열로 바꾸고, 내림차순으로 정렬한 뒤 이어붙이는 거였다. 그렇게 되면 각 숫자의 제일 앞에 자리부터 비교하며 큰 수가 제일 앞에 오게 되고, 그대로 이어붙이면 가장 큰 수가 될 것이라고 생각했지만 틀

문제 링크스코빌 지수가 가장 낮은 두 음식을 섞어야하므로, 주어지는 음식들을 오름차순으로 정렬해야한다. 그리고, 두 음식을 섞은 새로운 음식이 생겨도 스코빌 지수 목록은 오름차순으로 정렬이 유지되어야 한다.하지만 음식을 섞을 때마다 정렬을 하는 방식으로 구현하면, 시간
문제 링크투포인터를 사용해서 문자열 양 끝을 비교한다. 양쪽의 문자가 같으면 두 포인터를 모두 안쪽으로 이동한다. 한쪽이 'x'이고 다른 쪽이 다른 문자라면 'x'가 아닌 쪽에 'x'를 추가한다. 즉, 'x'인 쪽만 포인터를 안쪽으로 이동시킨다. 양쪽 모두 'x'가 아

문제 링크S -> T로 만들며 비교하는 방법보다는 T -> S로 만드는 방법이 시간을 절약할 수 있을 거 같아서 그렇게 풀이하였다. BFS를 사용해서 T가 "A"로 끝나는 경우에는 A를 제거 후 큐에 추가, "B"로 시작하는 경우에는 문자열을 뒤집은 후 B를 제거한 후

문제 링크컨베이어 벨트를 LinkedList로 구현하여 풀었다. 문제에서 요구하는 움직임을 4개의 메서드로 나누었다. 전체 컨베이어 벨트 회전로봇의 이동내리는 위치에서 로봇 내리기올리는 위치에 로봇 올리기전체 컨베이어 벨트 회전단순하게 제일 뒤 칸을 제일 앞으로 옮겨주

업로드중..문제 링크크기가 100인 배열을 선언한 후, 각 칸에 해당하는 숫자를 저장한다. 뱀이나 사다리가 있는 경우, 해당 인덱스의 배열 값에 이동 후 도착하는 곳의 값을 저장한다. 1번 칸에서 출발하여 BFS로 100번 칸까지 최단 거리로 이동한다.큐에는 주사위를

문제 링크반년 전에 풀었던 문제를 다시 풀어보았다. Stack을 선언하고, 각 탑을 순서대로 스택에 넣는다.현재 탑을 스택에 넣기 전에, 스택에 쌓인 탑 중 현재 탑보다 낮은 높이의 탑들은 모두 pop()하여 제거한다.낮은 탑들을 제거하는 이유는, 이후에 더 높은 탑이

문제 링크문자열에서 각 알파벳의 등장 횟수를 센다.등장 횟수가 k보다 작은 알파벳은 탐색 대상에서 제외한다.등장 횟수가 k 이상인 알파벳만을 대상으로 다음 과정을 진행한다:문자열을 왼쪽부터 오른쪽으로 탐색하며 해당 문자를 만날 때마다 개수를 센다.해당 문자를 k번째 만

문제 링크배열에 블록들의 높이를 저장한다. 양쪽 끝을 제외한 모든 요소들을 탐색하며 탐색하는 블록 기준으로 왼쪽과 오른쪽 블록들 중에 제일 높은 블록의 높이를 각각 구한다. 구한 두 값을 비교하여 더 작은 값을 구하고, 그 값이 현재 탐색 중인 블록보다 크면 그 만큼

문제 링크이미 용액들이 오름차순으로 정렬되어 있으므로, 양 끝에 포인터를 둬서 경우에 따라 안쪽으로 포인터를 좁혀가며 혼합 용액의 값을 갱신한다. 특성값이 0에 가깝다는 말은, 특성값의 절대값이 최소인 값을 찾는다는 것이다. 초기에는 절댓값의 최솟값을 큰 값(Integ

문제 링크매번 X일 동안의 방문자 수의 합을 계산하면 중복된 연산이 많아지고 시간 초과가 발생하게 된다. (최대 $8,000 250,000 = 2 10^9$ 번)따라서 슬라이딩윈도우 알고리즘을 사용하여 방문자 수의 합을 계산한다. X일의 범위를 유지하면서 하루씩 뒤

문제 링크미로 탐색 문제와 매우 비슷하지만 미로 탐색이 조금 더 쉬우므로 해당 문제가 풀리지 않는다면 먼저 푸는 것을 추천한다. 최단거리를 구해야하고, n\*m이 최대 $10^6$이며 시간제한이 1초이므로 BFS로 충분히 풀이할 수 있다.문제의 조건은 모든 지점으로부터

문제 링크두개의 포인터를 0으로 초기화하고, start는 고정 후 end을 오른쪽으로 이동시키며 수열의 인덱스에 해당하는 숫자 채count를 증가시킨다. endIdx에 해당하는 수열의 카운트가 k보다 크면, endIdx의 이동을 그만두고 해당 부분 수열의 길이를 계산하

문제 링크각 숫자(0~9)는 7개의 LED로 구성된 배열로 표현된다.예를 들어, 숫자 0은 아래와 같이 7개의 LED 중 6개가 켜진 상태로 나타난다층 수를 디스플레이 형태로 변환예를 들어 k = 4, x = 12일 경우, 0, 0, 1, 2로 표현된다.모든 층을 순회

문제 링크dpi = 0 ~ i까지의 최소 거리로 정의모든 위치 i에 대해 반복문을 돌며 아래의 상황을 고려한다. 일반 도로로 i+1에 이동하는 경우 → dpi+1 = dpi + 1현재 위치(i)에서 시작하는 지름길이 있다면 해당 지름길을 타고 end로 이동하는 경우 →

문제 링크dp로 풀이하였다. dp 배열은 이차원 배열로 선언한다. dpi는 i번째 수까지 사용했을 때 j값을 만들 수 있는 경우의 수를 의미한다.