본문 바로가기

분류 전체보기182

자바 자료구조 개요 Java에서 사용할 수 있는 다양한 자료구조는 Java Collections Framework(JCF)를 통해 제공된다. 쉽게 정리해 보겠다. 자바 콜렉션 프레임워크에는 인터페이스랑 클래스가 있는데 인터페이스에는 리스트, 셋, 큐, 맵이 있고(콜렉션도 있는데 이건 다르 콜렉션 인터페이스의 루트 인터페이스라 자료구조라 할 수 없다.) 이것들을 바탕으로 클래스가 구현된다. 물론, 해당 인터페이스를 우리가 구현할 수도 있다. List: 순서가 있고 중복이 허용된다. Set: 중복이 허용 안 된다. Queue: 요소를 처리하기 전에 보관하는 곳. 일반적으로 요소들이 처리되는 순서를 관리한다. Map: 키-값 쌍을 저장하는 구조다. 키는 중복될 수 없고 값 하나를 매핑한다. => 인터페이스는 메서드 시그니처만 정.. 2024. 4. 13.
콜라츠 수열 만들기 문제 설명 모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다. 그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다. 계산 결과 1,000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 알려져 있습니다. 임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값이 n인 콜라츠 수열을 return 하는 solution 함수를 완성해 주세요. 제한사항 1 ≤ n ≤ 1,000 입출력 예 n result 10 [10, 5, 16, 8, 4, 2, 1] import java.util.Array.. 2024. 4. 13.
약수 구하기 문제 설명 정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요. 제한사항 1 ≤ n ≤ 10,000 입출력 예 n result 24 [1, 2, 3, 4, 6, 8, 12, 24] 29 [1, 29] import java.util.stream.IntStream; class Solution { public int[] solution(int n) { int[] answer = IntStream.rangeClosed(1, n) .filter(i -> n % i ==0) .toArray(); return answer; } } import java.util.List; import java.util.ArrayList; class Solutio.. 2024. 4. 13.
가장 큰 수 찾기 문제 설명 정수 배열 array가 매개변수로 주어질 때, 가장 큰 수와 그 수의 인덱스를 담은 배열을 return 하도록 solution 함수를 완성해보세요. 제한사항 1 ≤ array의 길이 ≤ 100 0 ≤ array 원소 ≤ 1,000 array에 중복된 숫자는 없습니다. 입출력 예 array result [1, 8, 3] [8, 1] [9, 10, 11, 8] [11, 2] import java. util.OptionalInt; import java.util.Arrays; import java.util.stream.IntStream; class Solution { public int[] solution(int[] array) { OptionalInt opMaxInt = Arrays.stream(a.. 2024. 4. 13.
코드 처리하기 문제 설명 문자열 code가 주어집니다. code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다. mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다. mode가 0일 때 mode가 1일 때 문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요. 단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다. 제한사항 1 ≤ code의 길이 ≤ 100,000 입출력 예 code result "abc1abc1abc.. 2024. 4. 13.
9로 나눈 나머지 문제 설명 음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다. 이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요. 제한사항 1 ≤ number의 길이 ≤ 100,000 number의 원소는 숫자로만 이루어져 있습니다. number는 정수 0이 아니라면 숫자 '0'으로 시작하지 않습니다. 입출력 예 number result "123" 6 "78720646226947352489" 2 import java.util.stream.IntStream; class Solution { public int solution(String number) {.. 2024. 4. 13.
접미사 배열 문제 설명 어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다. 문자열 my_string이 매개변수로 주어질 때, my_string의 모든 접미사를 사전순으로 정렬한 문자열 배열을 return 하는 solution 함수를 작성해 주세요. 제한사항 my_string은 알파벳 소문자로만 이루어져 있습니다. 1 ≤ my_string의 길이 ≤ 100 입출력 예 my_string result "banana" ["a", "ana", "anana", "banana", "na", "nana"] "programmers" ["ammers", "ers", "grammer.. 2024. 4. 12.
가까운 1 찾기 문제 설명 정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다. 정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요. 단, 만약 그러한 인덱스가 없다면 -1을 반환합니다. 제한사항 3 ≤ arr의 길이 ≤ 100'000 입출력 예 arr idx result [0, 0, 0, 1] 1 3 [1, 0, 0, 1, 0, 0] 4 -1 [1, 1, 1, 1, 0] 3 3 import java.util.stream.IntStream; class Solution { public int solution(int[] arr, int idx) { int answer = 0; answer = IntStream.range.. 2024. 4. 12.
문자열 잘라서 정렬하기 문제 설명 문자열 myString이 주어집니다. "x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return 하는 solution 함수를 완성해 주세요. 단, 빈 문자열은 반환할 배열에 넣지 않습니다. 제한사항 1 ≤ myString ≤ 100,000 입출력 예 myString result "axbxcxdx" ["a","b","c","d"] "dxccxbbbxaaaa" ["aaaa","bbb","cc","d"] import java.util.Arrays; class Solution { public String[] solution(String myString) { String[] parts = myString.split("x"); String[] answer = Arrays.. 2024. 4. 12.
간단한 식 계산하기 문제 설명 문자열 binomial이 매개변수로 주어집니다. binomial은 "a op b" 형태의 이항식이고 a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나입니다. 주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요. 제한사항 0 ≤ a, b ≤ 40,000 0을 제외하고 a, b는 0으로 시작하지 않습니다. 입출력 예 binomial result "43 + 12" 55 "0 - 7777" -7777 "40000 * 40000" 1600000000 class Solution { public int solution(String binomial) { int answer = 0; String[] parts = binomial.split(" "); int a.. 2024. 4. 12.
l로 만들기 문제 설명 알파벳 소문자로 이루어진 문자열 myString이 주어집니다. 알파벳 순서에서 "l"보다 앞서는 모든 문자를 "l"로 바꾼 문자열을 return 하는 solution 함수를 완성해 주세요. 제한사항 1 ≤ myString ≤ 100,000 입출력 예 myString result "abcdevwxyz" "lllllvwxyz" "jjnnllkkmm" "llnnllllmm" import java.util.stream.*; class Solution { public String solution(String myString) { // 이렇게 하면 string을 intstream으로 나눌 수 있다. return myString.chars() // 각 int를 문자로 바꾼다. .mapToObj(c -> .. 2024. 4. 12.
부분 문자열 이어 붙여 문자열 만들기 문제 설명 길이가 같은 문자열 배열 my_strings와 이차원 정수 배열 parts가 매개변수로 주어집니다. parts[i]는 [s, e] 형태로, my_string[i]의 인덱스 s부터 인덱스 e까지의 부분 문자열을 의미합니다. 각 my_strings의 원소의 parts에 해당하는 부분 문자열을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요. 제한사항 1 ≤ my_strings의 길이 = parts의 길이 ≤ 100 1 ≤ my_strings의 원소의 길이 ≤ 100 parts[i]를 [s, e]라 할 때, 다음을 만족합니다. 입출력 예 my_strings parts result ["progressive", "hamburger", "hammer", "ahocora.. 2024. 4. 11.