목록workspace/algorithm (149)
HwangHub
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 문제 해석 * 양의 정수 x에 2를 곱하는 연산을 n번 반복 1. 2를 곱할 때마다 매번 현재 숫자의 범위에 대한 단서 제공 2. 가능한 x값 중 최솟값 구하는 프로그램 작성 -> n이 10 이하의 양의 정수이므로 완탐 로직 중 브루트포스로도 충분히 풀 수 있다. 풀이 로직 n loop 아래에 주어지는 두 개의 수를 입력 두 수를 2의 거듭제곱으로 나눠서 x의 범위를 추산 해당 범위의 숫자를 모두 트리맵에 등록하고, count. for loop 끝나면 tm의 키를 순회하며 value 중에서 모든 조건을 ..

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 문제 해석 이 문제는 모든 경우의 수를 순회하면서 '아름다운 수'인지 판단하고, 그 수를 세는 문제이다. n도 10 이하의 자연수이므로 완전 탐색 알고리즘 중 하나를 사용하는 것이 합리적이다. 그 중에서 이번에는 n에 따라 파악해야 하는 대상 숫자의 자릿수가 변동되므로 완전탐색 중 백트래킹을 이용하여 경우의 수를 탐색하고, 탐색된 경우의 수가 '아름다운 수'인지 확인하는 함수를 작성해서 true일 때마다 count할 수 있도록 연산하면 된다. 풀이 코드 import java.io.BufferedReade..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해석 위 문제는 brown 타일과 yellow 타일이 배치되는 간단한 규칙을 설명해주고, 각 타일의 개수가 주어졌을 떄, 어떤 모양으로 나올지를 탐색하여 그 모양의 가로와 세로 숫자를 반환하면 되는 문제였다. 이 문제의 경우에는 brown이 8 이상 5,000이하의 자연수, 그리고 yellow가 1이상 2백만 이하의 자연수이다. 완전탐색 로직을 생각해보면, yellow로 주어진 숫자를 1,2,3,4,5,...로 나눠서 딱 떨어지는 값에 대하여 brown개수가 일치하는지 볼 것이므로 완전탐색으로 계산하여도..
문제 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 분석 주어진 조건에 맞춰 경우의 수를 출력하는 문제입니다. 우리가 알고있는 순열/조합의 경우 구현되어있는 라이브러리를 사용하는 것 외에, 일반적으로는 for문을 이용한 완전탐색을 이용하여 모든 경우의 수를 구하는 접근법을 쉽게 떠올릴 수 있습니다. 하지만 이 문제에서는 주어지는 자릿수가 매번 바뀌며, 입력하는 숫자도 조합을 이용하여 입력되어야 하므로 단순하게 for문만을 사용한 완탐으로 접근한다면 까다로울 수 있습니다. 이처럼 for문으로 처리하기 어려운 순열/조합과 같은 경우의 수를 구하는 완전 ..
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 런타임 에러는 십중팔구 IndexOutOfBoundException 문제이다. 인덱스 에러가 발생할 수 있는 포인트를 확인하여 디버깅해야 한다. package 코드트리.그래프.DFS; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class 안전_지대 { public static int n, m; public static int[] dx ..
문제 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 알고리즘 주어진 일련의 문자열이나 수열에서 3개를 뽑아서 가짓수를 구하는 경우에, 완탐을 할 경우 시간이 초과할 것 같다면 누적합을 고려해볼 수 있다. 이 때에는 누적합 응용 기술인 LR 테크닉을 적용하는 것이 좋다. 이 문제에서는 n이 10의 5제곱까지이므로 완탐으로는 절대 풀 수 없을 것이다. 따라서 LR 테크닉을 적용하였다. 문제풀이 V1 : 실패 곱셈을 계속 더해주다보면 int 타입의 범위를 넘어서게 되어 오버플로우가 발생할 수 있다. 특히나 문자열의 길이가 10^5이므로 더욱 조심해야 한다..
https://www.codetree.ai/missions/8/problems/top-3-smallest-number?utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 알고리즘 간단하게 생각해서 최솟값 3개를 입력 받을때마다 빼고, 이를 곱한걸 출력하는 것이니, 입력 받을때마다 어떻게 최솟값을 뽑아낼지만 고민하면 된다. 중복되는 값이 존재할 수 있는 경우에서 최솟값을 매번 찾는 연산을 수행하려면 O(logN)으로 수행 가능한 우선순위 큐를 사용하면 좋다. V1 : 틀림 처음엔 이게 왜 틀..
https://www.codetree.ai/missions/8/problems/delete-it-from-the-beginning-2?utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 알고리즘 N이 최대 100,000이므로 2중 루프는 사용할 수 없으니, 경우의 수를 냅다 다 훑을 수 없으므로 완전탐색은 아니다. 매번 k개의 숫자를 제거하는 연산은 불필요하며, 결국 모든 경우를 돌았을 때의 결론을 얻어내기 위해서는 주어진 숫자를 역순으로 입력받을 수 있으면 되니까 배열을 이용하여 인덱스를..
point of failure 주어지는 숫자의 범위가 -10억부터 +10억까지인데, 나는 출력하기 위한 값을 저장하는 변수 ans를 int 타입으로 선언하였다. analysis 로직 자체는 어렵지 않은 문제였다. 하지만 컴퓨터는 항상 타입별로 표현할 수 있는 숫자의 크기가 다르단 것을 명심해야 한다. 현재 주어질 수 있는 x, y의 범위가 10억까지인데, int는 약 -20억(-2*10^9)부터 +20억(+2*10^9)까지 표현이 가능하다. 그렇다면 단발적으로 x, y 좌표를 나타낼 순 있지만, 3개의 y 좌표를 더한 값을 나타내려 하는 순간 overflow가 발생한다. 따라서 정답을 담아야 하는 변수는 long으로 나타내야 한다. 그렇게 하면 n이 1000이라 하더라도, 즉 10억인 y가 1000개 있..
Point of failure 처음에 시간복잡도를 고려하지 않고 2차원 loop를 이용하여 완전탐색으로 하려고 했다. public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int k = Integer.parseInt(st.nextToken()); Map map = new HashMap(); st = new Str..