본문 바로가기

Algorithm

(402)
[프로그래머스(Java)] 문자열 잘라서 정렬하기 / replaceAll(), 정규식, trim(), toArray(String[]::new); Level. 0 문제 문자열 myString이 주어집니다. "x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return 하는 solution 함수를 완성해 주세요. 단, 빈 문자열은 반환할 배열에 넣지 않습니다. * 제한사항 - 1 ≤ myString ≤ 100,000 - myString은 알파벳 소문자로 이루어진 문자열입니다. 풀이 import java.util.Arrays; class Solution { public String[] solution(String myString) { myString = myString.replaceAll("x{1,}", " "); String[] answer = myString.trim().split(" "); Arrays.sort(an..
[프로그래머스(Java)] 배열 만들기 3 / IntStream.range Level. 0 문제 정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다. intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다. 이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요. * 제한사항 - 1 ≤ arr의 길이 ≤ 100,000 1 ≤ arr의 원소 < 100 - 1 ≤ a1 ≤ b1 < arr의 길이 - 1 ≤ a2 ≤ b2 < arr의 길이 풀이1. stream import java.util.Arrays; import jav..
[프로그래머스(Java)] [PCCE 기출문제] 10번 데이터 분석 / Stream, toArray(int[][]::new), sort Level. 1 문제 AI 엔지니어인 현식이는 데이터를 분석하는 작업을 진행하고 있습니다. 데이터는 ["코드 번호(code)", "제조일(date)", "최대 수량(maximum)", "현재 수량(remain)"]으로 구성되어 있으며 현식이는 이 데이터들 중 조건을 만족하는 데이터만 뽑아서 정렬하려 합니다. 예를 들어 다음과 같이 데이터가 주어진다면 data = [[1, 20300104, 100, 80], [2, 20300804, 847, 37], [3, 20300401, 10, 8]] 이 데이터는 다음 표처럼 나타낼 수 있습니다. code date maximum remain 1 20300104 100 80 2 20300804 847 37 3 20300401 10 8 주어진 데이터 중 "제조일이 2030..
[프로그래머스(Java)] 외계행성의 나이 Level. 0 문제 우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요. * 제한사항 - age는 자연수입니다. - age ≤ 1,000 - PROGRAMMERS-962 행성은 알파벳 소문자만 사용합니다. 풀이. 1 class Solution { public String solution(int age) { Strin..
[프로그래머스(Java)] l로 만들기 / Stream, replaceAll(),정규식 Level. 0 문제 알파벳 소문자로 이루어진 문자열 myString이 주어집니다. 알파벳 순서에서 "l"보다 앞서는 모든 문자를 "l"로 바꾼 문자열을 return 하는 solution 함수를 완성해 주세요. * 제한사항 - 1 ≤ myString ≤ 100,000 - myString은 알파벳 소문자로 이루어진 문자열입니다. 풀이. 1 - Stream import java.util.*; import java.util.stream.Collectors; class Solution { public String solution(String myString) { return Arrays.stream(myString.split("")) .map(i->(i.compareTo("l")
[프로그래머스] 두 큐 합 같게 만들기 / 투포인터 알고리즘 Level. 2 문제 길이가 같은 두 개의 큐가 주어집니다. 하나의 큐를 골라 원소를 추출(pop)하고, 추출된 원소를 다른 큐에 집어넣는(insert) 작업을 통해 각 큐의 원소 합이 같도록 만들려고 합니다. 이때 필요한 작업의 최소 횟수를 구하고자 합니다. 한 번의 pop과 한 번의 insert를 합쳐서 작업을 1회 수행한 것으로 간주합니다. 큐는 먼저 집어넣은 원소가 먼저 나오는 구조입니다. 이 문제에서는 큐를 배열로 표현하며, 원소가 배열 앞쪽에 있을수록 먼저 집어넣은 원소임을 의미합니다. 즉, pop을 하면 배열의 첫 번째 원소가 추출되며, insert를 하면 배열의 끝에 원소가 추가됩니다. 예를 들어 큐 [1, 2, 3, 4]가 주어졌을 때, pop을 하면 맨 앞에 있는 원소 1이 추출되어 [..
[프로그래머스(Java)] 약수 구하기 / mapToInt() Level. 0 문제 정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요. * 제한사항 - 1 ≤ n ≤ 10,000 풀이. 1 import java.util.stream.*; class Solution { public int[] solution(int n) { return IntStream.rangeClosed(1, n) .filter(i -> n%i == 0) .toArray(); } } 풀이. 2 import java.util.List; import java.util.ArrayList; class Solution { public int[] solution(int n) { List answer = new ArrayList(); ..
[프로그래머스(Java)] 피자 나눠 먹기 (2) / 유클리드 호재법 Level. 0 문제 머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요. * 제한사항 - 1 ≤ n ≤ 100 풀이 class Solution { int gcd(int a, int b){ if(a%b==0) return b; return gcd(b, a%b); } public int solution(int n) { int answer = n/gcd(Math.max(n, 6), Math.min(n, 6)); return answer; } } n과 6의 최소공배수(lcm = n1 * n2..