본문 바로가기

알고리즘 공부 및 문제 풀이

(317)
[pro] 프로그래머스 level2 169199 리코쳇 로봇 (Java) - BFS [문제] https://school.programmers.co.kr/learn/courses/30/lessons/169199 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] GOAL에 도달하는 최소 이동 횟수를 반환하는 BFS 문제. 현재 위치에서 상, 하, 좌, 우 4 방향으로 슬라이딩해서 이동할 수 있다. 따라서 범위가 보드를 벗어나지 않고, 장애물 D에 도달하기 전까지 이동시킨다. 이동한 좌표 위치가 처음 위치와 같거나 이미 방문한 위치라면 다른 방향을 탐색하고, 그렇지 않다면 방문 처리 후 q에 넣는다. 큐에서 빼낸 좌표값이 G의 좌표값과 ..
[pro] 프로그래머스 level2 176962 과제 진행하기 (Java) - 그리디 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/176962# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 1. 과제 시작 시간 기준 오름차순 정렬해서 우선순위 큐에 넣어둔다. 2. 새로운 과제가 있다면 그 과제를 시작한다. 만약 현재시각+새로운 과제 소요 시간이 그 다음 과제 시작 시간보다 더 오래걸린다면 중간에 과제를 멈춰야 한다. 따라서 과제를 수행한 시간을 뺀 다음, stack에 멈춘 과제를 넣고, 새로운 과제를 시작한다. 현재 시간도 갱신해준다. 멈춘 과제를 다시 할 때,..
[pro] 프로그래머스 level2 172927 광물 캐기 (Java) - 그리디 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/172927 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 광물은 순서대로 캐야하고, 하나의 곡괭이를 이용해 5개의 연속된 광물을 캐야 한다. 1. 5개씩 광물의 섹션을 묶어서 다이아 곡괭이, 철 곡괭이, 돌 곡괭이로 각각 캤을 경우의 피로도의 합을 섹션별로 저장해둔다. 2. 돌로 캤을 때 가장 피로도가 높은 순서대로 내림차순 정렬한다. 돌로 캤을 때 피로도가 높은 경우를 다이아 곡괭이로 캐야 함을 이해해야 한다. 즉, 이 내림차순 정..
[boj] 백준 20207 달력 (Java) - 그리디 [문제] https://www.acmicpc.net/problem/20207 20207번: 달력 수현이는 일년의 날짜가 1일부터 365일로 표시되어있는 달력을 가지고있다. 수현이는 너무나도 계획적인 사람이라 올 해 일정을 모두 계획해서 달력에 표시해놨다. 여름이 거의 끝나가자 장 www.acmicpc.net [풀이] s~e일까지 cnt를 증가시켜준다. 캘린더의 일정이 끊이지 않고 연속된 길이가 잘라야 할 코팅지의 width가 되고 이때의 height는 그 날의 최대 일정의 수이다. [코드] package 그리디; import java.util.*; import java.io.*; public class boj_20207_달력 { static int n; static int[] cnt; public sta..
[boj] 백준 1548 부분 삼각 수열 (Java) - 완전탐색 [문제] https://www.acmicpc.net/problem/1548 1548번: 부분 삼각 수열 세 수 x, y, z가 x+y>z, x+z>y, y+z>x의 관계를 만족하면, 세 수는 삼각관계에 있다고 한다. 마찬가지로 길이가 N인 수열 B(b[0], b[1], ..., b[n-1])의 모든 b[i], b[j], b[k]가 삼각관계에 있으면 이 수열은 삼각 www.acmicpc.net [풀이] 먼저 삼각관계를 이루기 위해서는 오름차순으로 정렬했을 때 인덱스가 0, 1, ...., k 에 대해서 arr[0]+arr[1] > arr[k] 를 만족해야 한다. 가장 작은 두 수의 합이 가장 큰 수보다 크다면 세 수 x, y, z에 대해서 x+y>z, x+z>y, y+z>x의 관계를 만족할 것이기 때문이다..
[pro] 프로그래머스 level1 178871 달리기 경주 (Java) - HashMap [문제] https://school.programmers.co.kr/learn/courses/30/lessons/178871 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] players와 callings 의 범위에 따라 2중 for문을 돌려 callings에 해당 하는 값을 찾아 swap 하면 시간초과가 발생한다. callings에 해당하는 값을 바로 찾기 위해 HashMap을 사용한다. HashMap에 선수들의 이름과 등수를 저장해놓는다. HashMap에 저장했으므로 불려진 선수의 등수를 O(1)에 찾을 수 있다. players 배열에서 이 선..
[pro] 프로그래머스 level2 요격 시스템 (Java) - 그리디 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/181188 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 단속카메라 풀이와 똑같다. [코드] import java.util.*; class Solution { public int solution(int[][] targets) { int answer = 0; //모든 폭격 미사일을 요격하기 위해 필요한 요격 미사일 수의 최솟값을 return //e 기준 오름차순 정렬 Arrays.sort(targets, (o1, o2)->(o1[1]-..
[boj] 백준 17413 단어 뒤집기 (Java) - 스택 [문제] https://www.acmicpc.net/problem/17413 17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net [풀이] 스택을 이용해서 태그가 아닌 단어가 나오면 뒤집어서 저장해준다. [코드] package heap_stack_dequeue; import java.io.*; import java.util.*; public class boj_17413_단어뒤집기 { static String s; public static void main(String[] args) t..