본문 바로가기

Algorithm

(402)
[프로그래머스] 점 찍기 Level. 2 문제 좌표평면을 좋아하는 진수는 x축과 y축이 직교하는 2차원 좌표평면에 점을 찍으면서 놀고 있습니다. 진수는 두 양의 정수 k, d가 주어질 때 다음과 같이 점을 찍으려 합니다. 원점(0, 0)으로부터 x축 방향으로 a*k(a = 0, 1, 2, 3...), y축 방향으로 b*k(b = 0, 1, 2, 3...)만큼 떨어진 위치에 점을 찍습니다. 원점과 거리가 d를 넘는 위치에는 점을 찍지 않습니다. 예를 들어, k가 2, d가 4인 경우에는 (0, 0), (0, 2), (0, 4), (2, 0), (2, 2), (4, 0) 위치에 점을 찍어 총 6개의 점을 찍습니다. 정수 k와 원점과의 거리를 나타내는 정수 d가 주어졌을 때, 점이 총 몇 개 찍히는지 return 하는 solution..
[프로그래머스] 리코쳇 로봇 / bfs Level. 2 문제 리코쳇 로봇이라는 보드게임이 있습니다. 이 보드게임은 격자모양 게임판 위에서 말을 움직이는 게임으로, 시작 위치에서 목표 위치까지 최소 몇 번만에 도달할 수 있는지 말하는 게임입니다. 이 게임에서 말의 움직임은 상, 하, 좌, 우 4방향 중 하나를 선택해서 게임판 위의 장애물이나 맨 끝에 부딪힐 때까지 미끄러져 이동하는 것을 한 번의 이동으로 칩니다. 다음은 보드게임판을 나타낸 예시입니다. ...D..R .D.G... ....D.D D....D. ..D.... 여기서 "."은 빈 공간을, "R"은 로봇의 처음 위치를, "D"는 장애물의 위치를, "G"는 목표지점을 나타냅니다. 위 예시에서는 "R" 위치에서 아래, 왼쪽, 위, 왼쪽, 아래, 오른쪽, 위 순서로 움직이면 7번 만에 "G..
[프로그래머스(Java)] 접미사인지 확인하기 / endsWith(), startsWith() Level. 0 문제 어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다. 문자열 my_string과 is_suffix가 주어질 때, is_suffix가 my_string의 접미사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요. * 제한사항 - 1 ≤ my_string의 길이 ≤ 100 - 1 ≤ is_suffix의 길이 ≤ 100 - my_string과 is_suffix는 영소문자로만 이루어져 있습니다. 풀이1 class Solution { public int solution(String my_string, String..
[프로그래머스(Java)] 첫 번째로 나오는 음수 / findFirst(), orElse() Level. 0 문제 정수 리스트 num_list가 주어질 때, 첫 번째로 나오는 음수의 인덱스를 return하도록 solution 함수를 완성해주세요. 음수가 없다면 -1을 return합니다. 제한사항 5 ≤ num_list의 길이 ≤ 100-10 ≤ num_list의 원소 ≤ 100 풀이 import java.util.stream.*; class Solution { public int solution(int[] num_list) { return IntStream.range(0, num_list.length).filter( i-> num_list[i] < 0).findFirst().orElse(-1); } } https://school.programmers.co.kr/learn/courses/30/le..
[프로그래머스(Java)] 뒤에서 5등 위로 / skip Level. 0 문제 정수로 이루어진 리스트 num_list가 주어집니다. num_list에서 가장 작은 5개의 수를 제외한 수들을 오름차순으로 담은 리스트를 return하도록 solution 함수를 완성해주세요. * 제한사항 - 6 ≤ num_list의 길이 ≤ 30 - 1 ≤ num_list의 원소 ≤ 100 풀이1 import java.util.Arrays; class Solution { public int[] solution(int[] num_list) { int[] answer = new int[num_list.length-5]; Arrays.sort(num_list); for(int i=5; i
[프로그래머스] 하노이의탑 / 재귀함수 Level. 2 문제 하노이 탑(Tower of Hanoi)은 퍼즐의 일종입니다. 세 개의 기둥과 이 기동에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대로 쌓여 있습니다. 게임의 목적은 다음 두 가지 조건을 만족시키면서, 한 기둥에 꽂힌 원판들을 그 순서 그대로 다른 기둥으로 옮겨서 다시 쌓는 것입니다. 1. 한 번에 하나의 원판만 옮길 수 있습니다. 2. 큰 원판이 작은 원판 위에 있어서는 안됩니다. 하노이 탑의 세 개의 기둥을 왼쪽 부터 1번, 2번, 3번이라고 하겠습니다. 1번에는 n개의 원판이 있고 이 n개의 원판을 3번 원판으로 최소 횟수로 옮기려고 합니다. 1번 기둥에 있는 원판의 개수 n이 매개변수로 주어질 때, n개의..
[프로그래머스(Java)] 카운트 다운 / rangeClosed(), iterate() Level. 0 문제 정수 start_num와 end_num가 주어질 때, start_num에서 end_num까지 1씩 감소하는 수들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요. * 제한사항 - 0 ≤ end_num ≤ start_num ≤ 50 풀이. 1 - iterate import java.util.stream.*; class Solution { public int[] solution(int start, int end_num) { return IntStream.iterate(start, i-> i>=end_num, i-> i-1).toArray(); } } 풀이. 2 - rangeClosed import java.util.stream.*; class Solution..
[프로그래머스(Java)] 배열 비교하기 / Integer.compare Level.0 문제 이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다. 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다. 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다. 두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요. * 제한사항 - 1 ≤ arr1의 길이 ≤ 100 - 1 ≤ arr2의 길이 ≤ 100 - 1 ≤ arr1의 원소 ≤ 100 - 1 ≤ arr2의 원소 ≤ 100 - 문제에서 정의한 배열의 대소관계가 일반적인 프로그래밍 언어에서 정의된 ..