[JAVA] 팰린드롬인지 확인하기 ::: 구현, 문자열
·
Algorithm 문제풀기/Baekjoon
[ 문제 ]https://www.acmicpc.net/problem/10988   [ 제출코드 ]  [ 풀이 ]i는 입력 문자열의 시작에 위치하고, j는 입력 문자열의 가장 마지막 위치합니다.input[i]와 input[j]의 위치는 점점 가까워지면서 서로의 문자가 같은지 계속해서 판단합니다.if (input[i] != input[j]): print(0);else: i++; j--;
[JAVA] 알파벳 ::: 그래프탐색,DFS,백트래킹
·
Algorithm 문제풀기/Baekjoon
[ 문제 ]https://www.acmicpc.net/problem/1987  [ 제출코드 ]   [ 풀이 ]주어진 맵에서 알파벳을 탐색하여, 서로 다른 알파벳을 방문하는 경로의 최댓값을 구합니다.깊이 우선 탐색(DFS) 방식을 사용했습니다.   [ 시간 복잡도 & 공간 복잡도 ]DFS 탐색DFS에서 모든 가능한 경로를 탐색하려고 할 때, 각 지점에서 4개의 방향으로 재귀적으로 탐색합니다. visited 배열을 사용하여 방문한 알파벳을 기록하고, 이미 방문한 알파벳을 다시 방문하지 않도록 처리합니다.visited 배열의 크기는 최대 26 (`A`부터 `Z`까지)입니다. DFS에서 탐색하는 경로는 각 위치에서 최대로 26개의 알파벳을 방문할 수 있습니다.각 위치에서 4방향으로 탐색할 수 있지만, 방문한 알..
[JAVA] 테트로미노 ::: 구현,브루트포스
·
Algorithm 문제풀기/Baekjoon
보호되어 있는 글입니다.
[JAVA] 외판원 순회 2 ::: 브루트포스,백트래킹
·
Algorithm 문제풀기/Baekjoon
보호되어 있는 글입니다.
[JAVA] 연산자 끼워넣기 ::: 브루트포스,백트래킹
·
Algorithm 문제풀기/Baekjoon
보호되어 있는 글입니다.
[JAVA] 168. Excel Sheet Column Title ::: String
·
Algorithm 문제풀기
보호되어 있는 글입니다.
[JAVA] Get Watched Videos by Your Friends ::: 그래프
·
Algorithm 문제풀기
보호되어 있는 글입니다.
[JAVA] 스타트와 링크 ::: 브루트포스, 백트래킹
·
Algorithm 문제풀기/Baekjoon
보호되어 있는 글입니다.
[JAVA] 주사위 굴리기 ::: 구현, 시뮬레이션
·
Algorithm 문제풀기/Baekjoon
보호되어 있는 글입니다.
[JAVA] 퇴사 ::: DP, 브루트포스
·
Algorithm 문제풀기/Baekjoon
[ 문제 ]https://www.acmicpc.net/problem/14501   [ 제출코드 ]   [ 풀이 ]1. 퇴사일까지 남은 기간 N과 각 상담 기간 T[i], 금액 P[i]를 입력받은 뒤, 데이터를 저장합니다.2. dp[i]는 i일에 얻을 수 있는 최대 수익을 나타냅니다.3. 현재 상담이 퇴사일 이전에 완료될 수 있는 경우, dp[i + t[i]]를 갱신합니다.4. 기존 값(dp[i + t[i]])과 현재 상담 금액(dp[i] + p[i]) 중 더 큰 값을 선택하여 저장합니다.5. 상담을 하지 않을 경우, 현재까지의 최대 수익(dp[i])을 다음 날(dp[i + 1])로 넘깁니다. 시간복잡도루프: 각 날에 대해 한 번씩 순회 (O(n))갱신 작업: 각 상담에 대해 상수 시간 복잡도 (O(1))..
[JAVA] 시험 감독 ::: 수학, 사칙연산
·
Algorithm 문제풀기/Baekjoon
보호되어 있는 글입니다.
[JAVA] 성냥개비 ::: DP, 그리디
·
Algorithm 문제풀기/Baekjoon
[ 문제 ]https://www.acmicpc.net/problem/3687   [ 제출코드 ]   [ 풀이 ]성냥개비 개수만들 수 있는 숫자21374452, 3, 560, 6, 978성냥개비 개수만들 수 있는 최솟값810DP(2) = 1DP(6) = 0918DP(2) = 1DP(7) = 81022DP(5) = 2DP(5) = 21120DP(5) = 2DP(6) = 01228DP(5) = 2DP(7) = 81368DP(6) = 6DP(7) = 8  1. 가장 작은 수 구하기성냥개비 개수가 6개인 경우, 숫자가 가장 앞에 와야하는 경우, 가장 작은 수 : 6이 외, 가장 작은 수 : 0아래 결과 중 가장 작은 수를 DP(i)에 저장합니다.DP(i - 2) + plusNumber(2),DP(i - 3) + ..
[JAVA] 수들의 합 5 ::: 수학, 두 포인터
·
Algorithm 문제풀기/Baekjoon
[ 문제 ]https://www.acmicpc.net/problem/2018   [ 제출코드 ]   [ 풀이 ]1. 두 개의 포인터(시작, 끝)를 선언합니다.2. 연속된 자연수의 합인 sum을 구합니다.3. sum이 n과 같다면 answer에 1을 증가시킵니다.4. sum이 n보다 작다면 끝 포인터(endP)를 1 증가시킨 뒤 sum에서 증가시킨 끝 포인터(endP)를 더해줍니다.5. sum이 n보다 크다면 sum에서 시작 포인터(startP)만큼 뺀 뒤 시작 포인터(startP)를 1 증가시킵니다.
[JAVA] 나머지 합 ::: 수학, 누적합
·
Algorithm 문제풀기/Baekjoon
[ 문제 ]https://www.acmicpc.net/problem/10986   [ 제출코드 ]   [ 풀이 ]누적 합을 구한 배열(sumArr)을 생성합니다.sumArr에서 m으로 나눈 나머지의 값으로 이루어진 배열(modArr)을 생성합니다.modArr에서 0의 개수만큼 answer에 더해줍니다.modArr에서 i 위치가 0이라는 의미는 0번째부터 i번째까지의 합이 m으로 나누었을 때 나누어 떨어진다는 의미입니다.modArr에서 같은 수가 2개 이상인 경우 xC2를 구해서 answer에 더해줍니다.S[i] % m의 값과 S[j] % m의 값이 같다면 (S[i] - S[j]) % m은 0입니다.즉, 구간 합 배열의 원소(sumArr)를 m으로 나눈 나머지로 업데이트(modArr)하고 S[i]와 S[j..
[JAVA] 구간 합 구하기 5 ::: DP, 누적 합
·
Algorithm 문제풀기/Baekjoon
[ 문제 ]https://www.acmicpc.net/problem/11660   [ 제출코드 ]   [ 풀이 ]2차원 배열에서 각 부분까지의 누적합을 구한 뒤 계산합니다. 아래 배열(arr)이 주어졌을 때, 1234234534564567 다음과 같이 누적합 배열(sumArr)을 따로 생성해 줍니다.sumArr[i][j]를 채우는 방법은 arr[i][j] + sumArr[i][j - 1] + sumArr[i - 1][j] - sumArr[i - 1][j - 1] 입니다.13  => 1 + 26  => 1 + 2 + 310  => 1 + 2 + 3 + 43  => 1 + 28  => 3 + 3 + 3 - 115  => 4 + 6 + 8 - 3246  => 1 + 2 + 315274210  => 1 + 2 ..
[JAVA] 구간 합 구하기 4 ::: 누적합
·
Algorithm 문제풀기/Baekjoon
[ 문제 ]https://www.acmicpc.net/problem/11659   [ 제출코드 ]   [ 풀이 ]각 배열 위치의 누적합을 저장하는 배열을 따로 생성합니다.주어진 구간의 합을 구하기 위해 누적합 배열을 사용하면 됩니다. 예를 들어, 1번째 ~ 3번째 구간의 합을 구할 때는 "누적합의 3번째 위치"를 반환해주면 됩니다.2번째 ~ 4번째 구간의 합을 구할 때는 "누적합의 4번째 위치"에서 "누적합의 1번째 위치"를 빼주면 됩니다.
[JAVA] 덩치 ::: 구현, 브루트포스
·
Algorithm 문제풀기/Baekjoon
[ 문제 ]https://www.acmicpc.net/problem/7568   [ 제출코드 ]   [ 풀이 ]1. {위치, 몸무게, 키, 순위}를 담을 수 있는 Person 클래스를 만듭니다.2. 몸무게를 기준으로 오름차순으로 정렬합니다.3. 반복문으로 비교하면서, 현재 비교 대상인 사람보다 키와 몸무게 모두 큰 사람의 수만큼 순위에 더해줍니다.4. 위치에 맞게 정답을 출력합니다. 예를 들어서, 입력이 다음과 같다고 가정해 봅시다.655 18154 18156 18155 17956 18254 190 위의 입력은 2번에 의해 다음과 같이 정렬할 수 있습니다.6, 54 1902, 54 1814, 55 1791, 55 1815, 56 1823, 56 181 여기서 주의할 점은 6번과 2번 중 키는 6번이 더 ..
[JAVA] 부녀회장이 될테야 ::: DP
·
Algorithm 문제풀기/Baekjoon
[ 문제 ] https://www.acmicpc.net/problem/2775 [ 제출코드 ] [ 풀이 ] 0번째 행은 0층이고, 0열은 제외하고 1열부터 시작한다고 생각하면 됩니다. 이렇게 거주민 수를 담은 배열을 만들어 준 뒤, 정답을 요구하는 호수의 거주민만 찾으면 됩니다.
[JAVA] 섬의 개수 ::: BFS
·
Algorithm 문제풀기/Baekjoon
[ 문제 ] https://www.acmicpc.net/problem/4963 [ 제출코드 ] [ 풀이 ] 상하좌우와 4곳의 대각선으로 이동할 수 있기 때문에 dx와 dy는 총 8곳 입니다. 연결된 섬의 개수를 세야 하기 때문에 연결된 시작점에서만 카운트해주면 됩니다.
[JAVA] 나이트의 이동 ::: BFS
·
Algorithm 문제풀기/Baekjoon
[ 문제 ] https://www.acmicpc.net/problem/7562 [ 제출코드 ] [ 풀이 ] 나이트는 8가지 방향으로 움직일 수 있기 때문에 이에 맞춰서 dx와 dy를 정해줍니다. (상하좌우만 움직일 때와는 달라서 다르게 설정할 필요가 있었습니다.) 나이트가 움직일 수 있는 모든 위치마다 움직인 횟수를 기록합니다. 목적지의 위치(Position)의 횟수를 출력합니다. [ 참고 ] https://jyunslog.tistory.com/1
[JAVA] 안전 영역 ::: BFS
·
Algorithm 문제풀기/Baekjoon
[ 문제 ] https://www.acmicpc.net/problem/2468 [ 제출코드 ] [ 풀이 ] 물의 높이가 0일 때부터 땅의 최대 높이일 때까지 반복하면서 BFS로 안전 영역을 탐색합니다. 각 물의 높이에서의 안전 영역 중 최대값을 정답으로 출력합니다. [ 이야기 ] BFS로 구현한 코드가 예제 테스트는 성공하는데 제출만하면 계속 실패했습니다... 반례들도 넣어가면서 했지만 실패를 했는데 아래 참고 블로그를 보고 while의 조건문을 잘못 주었다는 것을 알게 되었습니다. 물의 높이가 0일 때부터 계속 반복하면서 안전 영역의 개수가 줄어드는 시점이 되면 그 전의 개수가 가장 최댓값인 줄 알았는데 아니었습니다. 그래서 while의 조건은 물의 높이가 0일 때부터 땅의 최대 높이까지 반복시키는 것..
[JAVA] 행렬 ::: 그리디 알고리즘
·
Algorithm 문제풀기/Baekjoon
[ 문제 ] https://www.acmicpc.net/problem/1080 [ 제출코드 ] [ 풀이 ] 두 행렬의 (0, 0)부터 비교해서 다르면 3x3 부분 행렬을 뒤집어 줍니다. 3x3 부분 행렬을 뒤집어 주어야 하기 때문에 주어진 행렬의 크기가 3보다 작고 두 행렬이 다른 경우 -1을 반환합니다. [ 이야기 ] 다음의 경우는 고려하지 않아서 몇 번 틀렸습니다. 다음과 같이 3x3보다 작은 행렬이 주어졌고 두 행렬이 같은 경우는 연산이 필요하지 않기 때문에 0을 반환해야 합니다. 1 1 1 1 [ 참고 ] https://lotuslee.tistory.com/75
[JAVA] 연속된 부분 수열의 합
·
Algorithm 문제풀기/프로그래머스
보호되어 있는 글입니다.
[JAVA] 124나라의 숫자
·
Algorithm 문제풀기/프로그래머스
보호되어 있는 글입니다.
[JAVA] 소수 찾기 ::: 완전탐색
·
Algorithm 문제풀기/프로그래머스
[ 문제 ] https://school.programmers.co.kr/learn/courses/30/lessons/42839 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요. 제한사항 numbers는 길이 1 이상 7 이하인 문자열입니다. numbers는 0~9까지 숫자만으로 이루어져 있습니다. "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다. 입출력 예 입출력 예 설명 예제 #1 [1, 7]으로는 소수 [7, 17, 71]를 만들 ..
[JAVA] 쿼드압축 후 개수 세기
·
Algorithm 문제풀기/프로그래머스
보호되어 있는 글입니다.
[JAVA] 2개 이하로 다른 비트
·
Algorithm 문제풀기/프로그래머스
보호되어 있는 글입니다.
[JAVA] 택배상자 ::: Stack
·
Algorithm 문제풀기/프로그래머스
보호되어 있는 글입니다.
[JAVA] 2 x n 타일링 ::: 다이나믹 프로그래밍(DP)
·
Algorithm 문제풀기/프로그래머스
보호되어 있는 글입니다.
[JAVA] 파일명 정렬
·
Algorithm 문제풀기/프로그래머스
보호되어 있는 글입니다.