본문 바로가기

Algorithm

(390)
[프로그래머스(Java)] 정사각형으로 만들기 / System.arraycopy() Level. 0 문제 이차원 정수 배열 arr이 매개변수로 주어집니다. arr의 행의 수가 더 많다면 열의 수가 행의 수와 같아지도록 각 행의 끝에 0을 추가하고, 열의 수가 더 많다면 행의 수가 열의 수와 같아지도록 각 열의 끝에 0을 추가한 이차원 배열을 return 하는 solution 함수를 작성해 주세요. * 제한사항 - 1 ≤ arr의 길이 ≤ 100 - 1 ≤ arr의 원소의 길이 ≤ 100 arr의 모든 원소의 길이는 같습니다. - 1 ≤ arr의 원소의 원소 ≤ 1,000 풀이 class Solution { public int[][] solution(int[][] arr) { int max = Math.max(arr.length,arr[0].length); int[][] answer = ..
[프로그래머스] 연속 부분 수열 합의 개수 / accumulate() Level. 2 문제 철호는 수열을 가지고 놀기 좋아합니다. 어느 날 철호는 어떤 자연수로 이루어진 원형 수열의 연속하는 부분 수열의 합으로 만들 수 있는 수가 모두 몇 가지인지 알아보고 싶어졌습니다. 원형 수열이란 일반적인 수열에서 처음과 끝이 연결된 형태의 수열을 말합니다. 예를 들어 수열 [7, 9, 1, 1, 4] 로 원형 수열을 만들면 다음과 같습니다. 원형 수열은 처음과 끝이 연결되어 끊기는 부분이 없기 때문에 연속하는 부분 수열도 일반적인 수열보다 많아집니다. 원형 수열의 모든 원소 elements가 순서대로 주어질 때, 원형 수열의 연속 부분 수열 합으로 만들 수 있는 수의 개수를 return 하도록 solution 함수를 완성해주세요. * 제한사항 - 3 ≤ elements의 길이 ≤ 1..
[프로그래머스(Java)] 무작위로 K개의 수 뽑기 / ArrayList.contains(), Stream concat(), limit(), distinct() Level. 0 문제 랜덤으로 서로 다른 k개의 수를 저장한 배열을 만드려고 합니다. 적절한 방법이 떠오르지 않기 때문에 일정한 범위 내에서 무작위로 수를 뽑은 후, 지금까지 나온 적이 없는 수이면 배열 맨 뒤에 추가하는 방식으로 만들기로 합니다. 이미 어떤 수가 무작위로 주어질지 알고 있다고 가정하고, 실제 만들어질 길이 k의 배열을 예상해봅시다. 정수 배열 arr가 주어집니다. 문제에서의 무작위의 수는 arr에 저장된 순서대로 주어질 예정이라고 했을 때, 완성될 배열을 return 하는 solution 함수를 완성해 주세요. 단, 완성될 배열의 길이가 k보다 작으면 나머지 값을 전부 -1로 채워서 return 합니다. * 제한사항 - 1 ≤ arr의 길이 ≤ 100,000 - 0 ≤ arr의 원소 ≤..
[프로그래머스(Java)] 수열과 구간 쿼리 2 / Arrays.fill() Level. 0 문제 정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다. 각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다. 각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요. 단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다. * 제한사항 - 1 ≤ arr의 길이 ≤ 1,000 0 ≤ arr의 원소 ≤ 1,000,000 - 1 ≤ queries의 길이 ≤ 1,000 0 ≤ s ≤ e < arr의 길이 0 ≤ k ≤ 1,000,000 풀이 import java.util.*; class Solutio..
[프로그래머스(Java)] 문자열 여러 번 뒤집기 / StringBuilder.reverse(), toCharArray() Level. 0 문제 문자열 my_string과 이차원 정수 배열 queries가 매개변수로 주어집니다. queries의 원소는 [s, e] 형태로, my_string의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. my_string에 queries의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요. * 제한사항 - my_string은 영소문자로만 이루어져 있습니다. - 1≤ my_string의 길이 ≤ 1,000 - queries의 원소는 [s, e]의 형태로 0 ≤ s ≤ e < my_string의 길이를 만족합니다. - 1 ≤ queries의 길이 ≤ 1,000 풀이 class Solution { public String solution(Strin..
[프로그래머스(Java)] 배열 만들기 6 / Stack Level. 1 문제 0과 1로만 이루어진 정수 배열 arr가 주어집니다. arr를 이용해 새로운 배열 stk을 만드려고 합니다. - i의 초기값을 0으로 설정하고 i가 arr의 길이보다 작으면 다음을 반복합니다. - 만약 stk이 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다. - stk에 원소가 있고, stk의 마지막 원소가 arr[i]와 같으면 stk의 마지막 원소를 stk에서 제거하고 i에 1을 더합니다. - stk에 원소가 있는데 stk의 마지막 원소가 arr[i]와 다르면 stk의 맨 마지막에 arr[i]를 추가하고 i에 1을 더합니다. 위 작업을 마친 후 만들어진 stk을 return 하는 solution 함수를 완성해 주세요. 단, 만약 빈 배열을 return 해야한다면..
[프로그래머스(Java)] 조건 문자열 / BiFunction, Map.of() Level. 1 문제 문자열에 따라 다음과 같이 두 수의 크기를 비교하려고 합니다. 두 수가 n과 m이라면 - ">", "=" : n >= m - "", "!" : n > m - "=")) return n>=m; if(str.equals("!")) return n>m; if(str.equals("=", (a, b) -> a >= b, "!", (a, b) -> a > b, "
[프로그래머스(Java)] 왼쪽 오른쪽 / Stream Level. 0 문제 문자열 리스트 str_list에는 "u", "d", "l", "r" 네 개의 문자열이 여러 개 저장되어 있습니다. str_list에서 "l"과 "r" 중 먼저 나오는 문자열이 "l"이라면 해당 문자열을 기준으로 왼쪽에 있는 문자열들을 순서대로 담은 리스트를, 먼저 나오는 문자열이 "r"이라면 해당 문자열을 기준으로 오른쪽에 있는 문자열들을 순서대로 담은 리스트를 return하도록 solution 함수를 완성해주세요. "l"이나 "r"이 없다면 빈 리스트를 return합니다. * 제한사항 - 1 ≤ str_list의 길이 ≤ 20 - str_list는 "u", "d", "l", "r" 네 개의 문자열로 이루어져 있습니다. 풀이 class Solution { public String[]..