Algorithm 306

하샤드 수

📍 문제 설명 문제 설명 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요. 제한 조건 x는 1 이상, 10000 이하인 정수입니다. 입출력 예arrreturn 10 true 12 true 11 false 13 false 입출력 예 설명 입출력 예 #1 10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다. 입출력 예 #2 12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다. 입출력 예 #3 11의 모든 ..

제일 작은 수 제거하기

📍 문제 설명 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다. 제한 조건 arr은 길이 1 이상인 배열입니다. 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다. 입출력 예 arrreturn [4,3,2,1] [4,3,2] [10] [-1] 💡 접근 내림차순 정렬 후 가장 작은 수를 제거하고 남은 원소를 list에 추가해서 배열에 넣어주는 식으로 구현하려 했음 내 방식의 문제점은 원배열을 정렬 시켜버렸다는 것.... 작은 값만 제거 하는 ..

정수 내림차순으로 배치하기

📍 문제 설명 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.제한 조건 n은 1이상 8000000000 이하인 자연수입니다. 입출력 예 return 118372 873211 💡 접근 처음에는 long 타입의 배열or리스트를 만들어서 처리해보려 했으나 아스키코드 숫자의 숫자가 들어가서 String으로 변환시켰다. 그러고나서 answer에 더해주는데 String 또 long 타입으로 변환시켜서 더해주다 보니 숫자로 인식해서 아예 String 변수를 하나 만들어서 완성시킨 후 answer에 넣어주는 식으로 풀었음 다른 사람은 ""을 기준으로 한 단어마다 배열을 만들..

이상한 문자 만들기

📍 문제 설명 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.제한 사항 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다. 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다. 입출력 예sreturn "try hello world" "TrY HeLlO WoRlD" 입출력 예 설명 "try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 ..

효율적인 화폐 구성

이 문제도 전형적으로 보텀업 방식을 이용해서 풀리는 문제이다. m원에 대한 최소 화폐 개수를 저장해놓는 d[m] 배열을 설정해놓고 화폐 단위에 따라 m원까지 탐색해나간다. 3원부터 시작해서 m원 까지 만들 수 있는 화폐 갯수 5원부터 ~ 7원부터 ~ 각 탐색시 마다 작은 값을 저장해준다. 일단 10,001이라는 값으로 초기화 시켜놓고 d[0] = 0으로 초기화시켜놓는다. 3원으로 만들 수 있는 화폐 갯수를 저장하기 위해 d[j - arr[i]] 라는 점화식을 사용한다.. 첫번째 화폐 단위는 3 d[3] = 1 d[6] = d[6-3] + 1 = 2 d[9] = d[9-3] + 1 = 3 ... 로 저장이 된다. 두번째 화폐 단위는 6 d[6] = 2와 1중에 1이 저장 import java.util.*;..

Algorithm/이코테 2021.11.25

1로 만들기

DP 테이블 d[n]은 n이라는 숫자가 1이 되기위해 연산해야 하는 숫자를 의미한다. 보텀업 방식으로 2,3, ... 라는 숫자가 1이 되기 위해 필요한 최소 연산 횟수를 구하고 최종적으로 x라는 숫자가 1이 되기 위해 필요한 최소 연산 횟수를 구해본다. d[0]은 사용 안할거고 d[1] = 0 이라는 값을 이용한다. d[2]일 때 2라는 숫자가 1이 되기 위해 필요한 연산 횟수를 구해본다. 1을 빼는 경우에 d[2] = 1이 되고 2,3,5로 나누어 떨어지는 경우도 고려해본다.(1보다 작을 경우는 없긴하지만) 최종적으로 2가 1이 되기 위한 값 d[2] = 1 이 된다. d[3]일 때 3이라는 숫자가 1이 되기 위해 필요한 연산 횟수를 구해본다. 1을 빼고 2라는 숫자가 1이 되기 위해 필요한 연산 횟..

Algorithm/이코테 2021.11.25

개미 전사

첫번째와 두번째 식량창고를 털때를 알 수가 있다. 그러면 어떻게 보텀업 방식으로 올라갈 수 있을까 생각해보자 d[0] = 3 d[1] = 1 or 3 중 큰 값으로 둔다. d[2]는 어떻게되냐면 d[0] + arr[2] 하거나 d[1]만 선택하는게 최댓값이 된다. d[2] = d[0] + arr[2] 가 됐다. d[3]은 d[1] + arr[3] 하거나 d[2]만 선택하는게 최댓값이 된다. 여기서 d[0]은 고려 안해도 되는 이유는 이미 d[2]에서 선택된 최댓값이 들어가 있기 때문이다. 점화식을 세우면 단순히 d[i] = Math.max(d[i-2]+arr[i], d[i-1]); 이 된다. import java.util.*; public class Main { public static void main..

Algorithm/이코테 2021.11.25

부품 찾기

📍 문제 설명 동빈이네 전자 매장에는 부품이 N개 있다. 각 부품은 정수 형태의 고유한 번호가 있다. 어느 날 손님이 M개의 종류의 부품을 대량으로 구매하겠다며 당일 날 견적서를 요청했다. 동빈이는 때를 놓치지 않고 손님이 문의한 부품 M개 종류를 모두 확인해서 견적서를 작성해야 한다. 이때 가게 안에 부품이 모두 있는지 확인하는 프로그램을 작성해보자. 예를 들어 가게의 부품이 총 5개일 때 부품 번호가 다음과 같다고 하자. N=5 [8, 3, 7, 9, 2] 손님은 총 3개의 부품이 있는지 확인 요청했는데 부품 번호는 다음과 같다. M=3 [5, 7, 9] 이때 손님이 요청한 부품 번호의 순서대로 부품을 확인해 부품이 있으면 yes를, 없으면 no를 출력한다. 구분은 공백으로 한다. 입력 첫째 줄에 정..

Algorithm/이코테 2021.11.23