목록PS (47)
개발 공부 기록
Question https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 💡 Solution HashMap을 key나 value에 따라 정렬할 수 있다면, 쉽게 해결할 수 있는 문제였습니다. 💻 Code import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util..
Question https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 💡 Solution 1. 문자열의 각 문자를 탐색합니다. 2. 현재 문자와 다음 문자가 다르다면, visited[다음 문자]가 true인지 확인합니다. → true라면 이전에 이미 나타난 문자라는 의미이므로 해당 문자열은 그룹 단어가 아닙니다. → false라면 이전에 나타나지 않은 문자이므로, 다음 탐색으로 넘어갑니다. 3. 현재 문자와 다음 문자..
☑️ 분할 정복이란? 분할 정복(Divide and Conquer)은 큰 문제를 작은 하위 문제로 분할하고, 각 하위 문제를 해결한 다음, 그 해답을 합쳐서 원래의 큰 문제를 해결하는 방법입니다. 즉, 분할 → 정복 → 결합의 단계로 이루어집니다. 대표적인 예로, 퀵 정렬(Quick Sort)이나 병합 정렬(Merge Sort)과 같은 정렬 알고리즘 문제와 이진 탐색 문제가 있습니다. ☑️ 재귀 함수를 통한 분할 정복의 구현 분할 정복 알고리즘은 주로 재귀 함수를 통해 구현됩니다. 재귀 함수는 자기 자신을 호출하는 함수로, 하위 문제를 해결하기 위해 반복적으로 자신을 호출합니다. 전체적인 과정은 아래와 같습니다. 1. 분할 : 큰 문제를 작은 하위 문제로 나누는 단계에서 재귀 함수를 호출하면서 하위 문제..
Question https://www.acmicpc.net/problem/17413 17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net 💡 Solution 단어를 뒤집는다는 점에서 후입선출의 Stack 자료구조를 이용하여 문제를 해결하였습니다. 💻 Code import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; public clas..
Question https://www.acmicpc.net/problem/11660 11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net 💡 Solution DP를 이용하여 해결합니다. 자신이 위치하는 행의 맨 앞 값부터 자신까지를 더하는 누적합을 구하고, 이를 이용하여 문제를 해결합니다. 💻 Code import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; impo..
Question https://www.acmicpc.net/problem/21758 21758번: 꿀 따기 첫 번째 줄에 가능한 최대의 꿀의 양을 출력한다. www.acmicpc.net 💡 Solution 다음과 같은 3가지 경우가 있습니다. 1. 벌통이 왼쪽 끝에 존재할 경우 : 이 경우에는 벌1은 반드시 오른쪽 끝에 존재해야 합니다. 벌은 반드시 벌통 쪽으로 이동해야하는데, 최대한 한 장소라도 더 거쳐서 꿀을 더 따야하기 때문입니다. 벌1의 위치는 정해졌으니, 벌2의 위치만 탐색하면 됩니다. 2. 벌통이 오른쪽 끝에 존재할 경우 : 1번과 반대로 벌1은 반드시 왼쪽 끝에 존재해야 합니다. 동일하게 벌2의 위치만 탐색하면 됩니다. 3. 벌통이 가운데에 있을 경우 : 이 경우에 벌1과 벌2는 반드시 양쪽..
Question https://school.programmers.co.kr/learn/courses/30/lessons/42842?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💡 Solution 처음에 탐색 범위를 1에서 yellow / 2로 하였다가 yellow 수가 1인 경우를 고려해서 yellow로 변경하였습니다. 저는 yellow의 약수를 찾는 방식으로 구현하였는데, 더 효율적인 풀이가 있을 거 같습니다. 💻 Code public static class Solution { public int[] solution(int b..
Question https://school.programmers.co.kr/learn/courses/30/lessons/12979 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💡 Solution W만큼 전파된 후, 해당 상태에서 기지국이 설치된 아파트를 중심으로 왼쪽에 전파되지 않은 아파트 구간이 있다면 해당 구간에서의 필요한 기지국의 개수를 구합니다. 만약 W가 1이라면, 하나의 기지국이 전파할 수 있는 아파트는 W * 2 + 1, 즉 3개입니다. 이러한 상황에서 왼쪽에 전파되지 않은 아파트의 개수가 1개라면 기지국은 1개가 필요하고, 2개일 경우에도..
Question https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PuPq6AaQDFAUq SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 💡 Solution 1. 값이 1일 경우 size를 + 1 해줍니다. 2. 값이 0일 경우(즉, 벽을 만났을 경우) size가 K라면 count를 + 1 해줍니다. 이후 size를 다시 초기화합니다. 3. 한 행/열의 탐색을 모두 마친 후 size가 K라면 count를 + 1 해줍니다. 💻 Code import java.io.BufferedReader; import java.io.I..
Question https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpoFaAS4DFAUq SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 💡 Solution 배열의 길이가 더 큰 쪽을 기준으로 생각합니다. A 배열이 [1, 5, 3]이고 B 배열이 [3, 6, -7, 5, 4]라면 서로 마주보는 숫자들을 곱할 수 있는 경우는 [1 * 3, 5 * 6, 3 * -7], [1 * 6, 5 * -7, 3 * 5], , [1 * -7, 5 * 5, 3 * 4] 총 3가지로 M - N + 1번입니다. 반대로 A 배열의 길이가 ..