본문 바로가기

Algorithm

(402)
[프로그래머스(Java)] 글자 이어 붙여 문자열 만들기 / StringBuilder Level. 0 문제 문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요. * 제한사항 - 1 ≤ my_string의 길이 ≤ 1,000 - my_string의 원소는 영소문자로 이루어져 있습니다. - 1 ≤ index_list의 길이 ≤ 1,000 - 0 ≤ index_list의 원소 < my_string의 길이 풀이1. StringBuilder class Solution { public String solution(String my_string, int[] index_list) { StringBuilder sb ..
[프로그래머스(Java)] 순서 바꾸기 Level. 0 문제 정수 리스트 num_list와 정수 n이 주어질 때, num_list를 n 번째 원소 이후의 원소들과 n 번째까지의 원소들로 나눠 n 번째 원소 이후의 원소들을 n 번째까지의 원소들 앞에 붙인 리스트를 return하도록 solution 함수를 완성해주세요. * 제한사항 - 2 ≤ num_list의 길이 ≤ 30 - 1 ≤ num_list의 원소 ≤ 9 - 1 ≤ n ≤ num_list의 길이 풀이 1. class Solution { public int[] solution(int[] num_list, int n) { int len = num_list.length; int[] answer = new int[len]; for(int i=0; i num_list[(n+i)%num_list...
[프로그래머스(Java)] 배열의 원소 삭제하기 / anyMatch() Level. 0 문제 정수 배열 arr과 delete_list가 있습니다. arr의 원소 중 delete_list의 원소를 모두 삭제하고 남은 원소들은 기존의 arr에 있던 순서를 유지한 배열을 return 하는 solution 함수를 작성해 주세요. * 제한사항 - 1 ≤ arr의 길이 ≤ 100 - 1 ≤ arr의 원소 ≤ 1,000 - arr의 원소는 모두 서로 다릅니다. - 1 ≤ delete_list의 길이 ≤ 100 - 1 ≤ delete_list의 원소 ≤ 1,000 - delete_list의 원소는 모두 서로 다릅니다. 풀이 1. import java.util.List; import java.util.ArrayList; class Solution { public int[] solution(..
[프로그래머스] 테이블 해시 함수 / sort, 람다 Level. 2 문제 완호가 관리하는 어떤 데이터베이스의 한 테이블은 모두 정수 타입인 컬럼들로 이루어져 있습니다. 테이블은 2차원 행렬로 표현할 수 있으며 열은 컬럼을 나타내고, 행은 튜플을 나타냅니다. 첫 번째 컬럼은 기본키로서 모든 튜플에 대해 그 값이 중복되지 않도록 보장됩니다. 완호는 이 테이블에 대한 해시 함수를 다음과 같이 정의하였습니다. 해시 함수는 col, row_begin, row_end을 입력으로 받습니다. 테이블의 튜플을 col번째 컬럼의 값을 기준으로 오름차순 정렬을 하되, 만약 그 값이 동일하면 기본키인 첫 번째 컬럼의 값을 기준으로 내림차순 정렬합니다. 정렬된 데이터에서 S_i를 i 번째 행의 튜플에 대해 각 컬럼의 값을 i 로 나눈 나머지들의 합으로 정의합니다.row_begi..
[프로그래머스] 미로 탈출 / BFS Level. 2 문제 1 x 1 크기의 칸들로 이루어진 직사각형 격자 형태의 미로에서 탈출하려고 합니다. 각 칸은 통로 또는 벽으로 구성되어 있으며, 벽으로 된 칸은 지나갈 수 없고 통로로 된 칸으로만 이동할 수 있습니다. 통로들 중 한 칸에는 미로를 빠져나가는 문이 있는데, 이 문은 레버를 당겨서만 열 수 있습니다.레버 또한 통로들 중 한 칸에 있습니다. 따라서, 출발 지점에서 먼저 레버가 있는 칸으로 이동하여 레버를 당긴 후 미로를 빠져나가는 문이 있는 칸으로 이동하면 됩니다. 이때 아직 레버를 당기지 않았더라도 출구가 있는 칸을 지나갈 수 있습니다. 미로에서 한 칸을 이동하는데 1초가 걸린다고 할 때, 최대한 빠르게 미로를 빠져나가는데 걸리는 시간을 구하려 합니다. 미로를 나타낸 문자열 배열 map..
[프로그래머스] 숫자 카드 나누기 Level. 2 문제 철수와 영희는 선생님으로부터 숫자가 하나씩 적힌 카드들을 절반씩 나눠서 가진 후, 다음 두 조건 중 하나를 만족하는 가장 큰 양의 정수 a의 값을 구하려고 합니다. - 철수가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고 영희가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a - 영희가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고, 철수가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a 예를 들어, 카드들에 10, 5, 20, 17이 적혀 있는 경우에 대해 생각해 봅시다. 만약, 철수가 [10, 17]이 적힌 카드를 갖고, 영희가 [5, 20]이 적힌 카드를 갖는다면 두 조건 중 하나를 만족하는 양의 정수 a는 존재하지 않습니다. 하지..
[프로그래머스(Java)] 홀수 vs 짝수 / iterate() Level. 0 문제 정수 리스트 num_list가 주어집니다. 가장 첫 번째 원소를 1번 원소라고 할 때, 홀수 번째 원소들의 합과 짝수 번째 원소들의 합 중 큰 값을 return 하도록 solution 함수를 완성해주세요. 두 값이 같을 경우 그 값을 return합니다. * 제한사항 - 5 ≤ num_list의 길이 ≤ 50 - -9 ≤ num_list의 원소 ≤ 9 풀이1 class Solution { public int solution(int[] num_list) { int num1=0, num2=0; for(int i=0; i i i+2).map(i->num_list[i]).sum(), IntStream.iterate(1, i-> i i+2).map(i->num_list[i]).sum()); }..
[프로그래머스(Java)] 가까운 1 찾기 / findFirst(), orElse() Level. 0 문제 정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다. 정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요. 단, 만약 그러한 인덱스가 없다면 -1을 반환합니다. * 제한사항 - 3 ≤ arr의 길이 ≤ 100,000 - arr의 원소는 전부 1 또는 0입니다. 풀이1 class Solution { public int solution(int[] arr, int idx) { int answer = -1; for(int i=idx; iarr[i]==1).findFirst().orElse(-1); } } findFirst() 와 findAny() filter조건에 일치하는 요소 1개를..