이끌든지 따르든지 비키든지

전체 글 61

[프로그래머스] 광물 캐기 - JAVA

프로그래머스 코딩 테스트 연습 문제 - 광물 캐기 / JAVA 풀이 정리 https://school.programmers.co.kr/learn/courses/30/lessons/172927 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 광물을 5개 단위로 묶고, 묶음마다 대해 돌을 가장 효율적으로 캘 수 있는 곡괭이를 선택한다. 돌을 가장 많이 캘 수 있는 곡괭이부터 사용하여 광물을 캐고, 해당 곡괭이의 사용 횟수를 감소시킨다. 위 과정을 곡괭이 사용 횟수를 소진할 때까지 반복한다. (광물이 5개 단위인 이유 : 한 번 곡괭이를 사용하면 소진될 ..

[프로그래머스] 숫자 짝꿍 - JAVA

프로그래머스 코딩 테스트 연습 문제 - 숫자 짝꿍 / JAVA 풀이 정리 https://school.programmers.co.kr/learn/courses/30/lessons/131128 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 for (char digit : X.toCharArray()) { countX[digit - '0']++; } for (char digit : Y.toCharArray()) { countY[digit - '0']++; } 입력된 문자열 X, Y를 순회하면서 등장하는 숫자의 횟수를 세어 배열에 저장한다. for (..

[프로그래머스] 도둑질 - JAVA

프로그래머스 코딩 테스트 연습 문제 - 도둑질 / JAVA 풀이 정리 https://school.programmers.co.kr/learn/courses/30/lessons/42897 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 이 문제는 동적 계획법(Bottom-Up)을 사용해 풀이하는데, 최대한 많은 돈을 훔치며 도둑질하기라는 전체 문제를 도둑질을 첫 번째 집부터 시작하기 도둑질을 두번째 집부터 시작하기 두 가지의 부분 문제로 나누어 해결한다. 코드 풀이 ▶ 첫번째 집을 터는 경우 // 첫번째 집을 털 경우 dp1[0] = money[0]..

[알고리즘] 동적 계획법(Dynamic Programming)

동적 계획법(Dynamic Programming)이란? 큰 문제를 여러 개의 부분 문제로 나누어 이를 해결하고, 그 결과를 저장하여 다시 큰 문제를 해결할 때 사용하는 문제해결방법이다. ■ 분할 · 정복(Divide & Conquer) 알고리즘이랑 비슷한데? 큰 문제를 여러 부분 문제로 나눈다는 점에서 분할 정복 알고리즘과 유사하다. 하지만, 이 두 방법 간에 가장 큰 차이점은 부분 문제의 중복 여부이다. 분할 · 정복 알고리즘은 부분 문제들 간에 중복이 없고 각각의 부분 문제는 독립적이지만, 동적 계획법에서 부분 문제 간에 중복이 존재하고, 해결한 부분 문제의 정답을 저장(Memoization)해 두었다 재활용해 문제를 해결한다. 동적 계획법의 사용 조건 1. 중복된 부분 문제 (Overlapping ..

[프로그래머스] 금과 은 운반하기 - JAVA

프로그래머스 코딩 테스트 연습 문제 - 금과 은 운반하기 / JAVA 풀이 정리 https://school.programmers.co.kr/learn/courses/30/lessons/86053 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 각 도시에 대해 금과 은을 운반할 수 있는 최적의 경로를 선택 선택된 경로에서 건설 장소로 이동하고, 금과 은을 운반하며 최소 시간을 계산 이진 탐색으로 각 도시에 대해 최소 시간을 계산하고, 그중 최소 시간을 반환 코드 풀이 매개변수(Parameter) 설명 a : 건설할 도시에 전달해야 할 금의 무게 b..

[알고리즘] 이진 탐색(Binary Search)

이진 탐색(Binary Search)이란? 우리가 종종 하는 업다운(Up & Down) 게임과 매우 유사한 검색 알고리즘이다. 리스트의 중간값을 선택해, 그 값이 목푯값인지, 아니면 앞에 있는지, 뒤에 있는지를 판단하고 목푯값을 찾을 때까지 이를 반복하는 알고리즘이다. 이진 탐색의 장 · 단점 매 탐색마다 범위의 절반을 덜어낼 수 있어 속도가 빠르고, 알고리즘의 구현도 비교적 간편하다. 다만, 특성상 정렬된 데이터에만 적용할 수 있기 때문에 정렬 작업이 선행되어야 한다.

[프로그래머스] 문자열 밀기 - JAVA

프로그래머스 코딩 테스트 연습 문제 - 문자열 밀기 / JAVA 풀이 정리 https://school.programmers.co.kr/learn/courses/30/lessons/120921 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 방법 1 public int solution(String A, String B) { return (B + B).indexOf(A); } 문자열 B를 2번 반복해 이어 붙인 다음 문자열 A가 나타나는 위치(인덱스를) 찾는다. 끝까지 밀어도 A를 찾을 수 없다면 -1, 같다면 0을 반환하므로 다른 조건도 완벽히 만족 방법 2..

[프로그래머스] 연속된 수의 합 - JAVA

프로그래머스 코딩 테스트 연습 문제 - 연속된 수의 합 / JAVA 풀이 정리 https://school.programmers.co.kr/learn/courses/30/lessons/120923 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내가 쓴 코드 public int[] solution(int num, int total) { int startValue = (total / num) - ((num - 1) / 2); int[] result = new int[num]; for (int i = 0; i < num; i++) { result[i] = sta..

[프로그래머스] 하샤드 수 - JAVA

프로그래머스 코딩 테스트 연습 문제 - 하샤드 수 / JAVA 풀이 정리 https://school.programmers.co.kr/learn/courses/30/lessons/12947 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 입력된 값(x)의 자릿수 합(sum)을 구한다. 입력된 값(x) % 자릿수 합(sum) == 0에 대한 결과를 boolean 타입으로 반환한다. 내가 작성한 코드 public boolean solution(int x) { int sum = 0; int origin = x; //자릿수의 합 계산하기 while (x >..

[프로그래머스] 기능 개발 문제 - JAVA

프로그래머스 코딩 테스트 연습 문제 - 기능 개발 / JAVA 풀이 정리 https://school.programmers.co.kr/learn/courses/30/lessons/42586 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 이 문제는 각 기능이 배포될 때마다 몇 개의 기능이 배포되는지를 구하는 문제이다. 각 기능별 작업 진도와 작업 속도를 이용하여 배포일을 계산하고, 배포일에 배포되는 기능 수를 구하면 된다. 기능별별 배포일 계산 작업 진도(progress)와 작업 속도(speed)를 이용하여 각 기능의 배포일을 계산 배포일 = (1..