본문 바로가기

Algorithm

(400)
[프로그래머스] 스킬트리 Level.2 문제 선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다. 위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다. 선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요. *..
[프로그래머스] 방문 길이 Level. 2 문제 게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같습니다. - U: 위쪽으로 한 칸 가기 - D: 아래쪽으로 한 칸 가기 - R: 오른쪽으로 한 칸 가기 - L: 왼쪽으로 한 칸 가기 캐릭터는 좌표평면의 (0, 0) 위치에서 시작합니다. 좌표평면의 경계는 왼쪽 위(-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 이루어져 있습니다. 예를 들어, "ULURRDLLU"로 명령했다면 1번 명령어부터 7번 명령어까지 다음과 같이 움직입니다. 8번 명령어부터 9번 명령어까지 다음과 같이 움직입니다. 이때, 우리는 게임 캐릭터가 지나간 길 중 캐릭터가 처음 걸어본 길의 길이를 구하려고 합니다. 예를 들어 위의 예시에서 게임 캐릭터가..
[프로그래머스(Java)] 특이한 정렬 / sort, Integer.compare(), compareTo() Level. 0 문제 정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요. * 제한사항 - 1 ≤ n ≤ 10,000 - 1 ≤ numlist의 원소 ≤ 10,000 - 1 ≤ numlist의 길이 ≤ 100 - numlist는 중복된 원소를 갖지 않습니다. 풀이 import java.util.Arrays; class Solution { public int[] solution(int[] numlist, int n) { int[] answer = new int..
[프로그래머스(Java)] 전국 대회 선발 고사 / PriorityQueue, Stream ( range, filter, box, sorted, reduce, get) Level. 0 문제 0번부터 n - 1번까지 n명의 학생 중 3명을 선발하는 전국 대회 선발 고사를 보았습니다. 등수가 높은 3명을 선발해야 하지만, 개인 사정으로 전국 대회에 참여하지 못하는 학생들이 있어 참여가 가능한 학생 중 등수가 높은 3명을 선발하기로 했습니다. 각 학생들의 선발 고사 등수를 담은 정수 배열 rank와 전국 대회 참여 가능 여부가 담긴 boolean 배열 attendance가 매개변수로 주어집니다. 전국 대회에 선발된 학생 번호들을 등수가 높은 순서대로 각각 a, b, c번이라고 할 때 10000 × a + 100 × b + c를 return 하는 solution 함수를 작성해 주세요. * 제한사항 - 3 ≤ rank의 길이 = attendance의 길이 ≤ 100 - rank..
[프로그래머스(Java)] 유한소수 판별하기 Level. 0 문제 소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다. - 기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다. 두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요. * 제한사항 - a, b는 정수0 < a ≤ 1,000 - 0 < b ≤ 1,000 풀이 class Solution { public int solution(int a, int b) { int answer = 0; int num = 1; for(int i=3; i
[프로그래머스(Java)] 대소문자 바꿔서 출력하기 Level. 0 문제 영어 알파벳으로 이루어진 문자열 str이 주어집니다. 각 알파벳을 대문자는 소문자로 소문자는 대문자로 변환해서 출력하는 코드를 작성해 보세요. * 제한사항 - 1 ≤ str의 길이 ≤ 20 - str은 알파벳으로 이루어진 문자열입니다. 풀이 import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a = sc.next(); String answer = ""; for(int i=0; i
[프로그래머스(Java)] 치킨 쿠폰 Level. 0 문제 프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요. * 제한사항 - chicken은 정수입니다. - 0 ≤ chicken ≤ 1,000,000 풀이 class Solution { public int solution(int chicken) { int answer = 0; while(chicken >= 10){ answer += chicken/10; chicken = chicken%10 + chicken/10; } r..
[프로그래머스(Java)] 등수 매기기 / ArrayList.indexOf, TreeMap, Comparator.reverseOrder() Level. 0 문제 영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score가 주어질 때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return하도록 solution 함수를 완성해주세요. * 제한사항 - 0 ≤ score[0], score[1] ≤ 100 - 1 ≤ score의 길이 ≤ 10 - score의 원소 길이는 2입니다. - score는 중복된 원소를 갖지 않습니다. 풀이 import java.util.stream.IntStream; import java.util.*; class Solution { public int[] solution(int[][] score) { int[] answe..