전체 글 180

백준 1015 - 수열 정렬

문제 https://www.acmicpc.net/problem/1015 1015번: 수열 정렬 P[0], P[1], ...., P[N-1]은 0부터 N-1까지(포함)의 수를 한 번씩 포함하고 있는 수열이다. 수열 P를 길이가 N인 배열 A에 적용하면 길이가 N인 배열 B가 된다. 적용하는 방법은 B[P[i]] = A[i]이다. 배열 A가 주 www.acmicpc.net 풀이 아래 그림에서 P 배열을 구하는 문제이다. A 배열을 정렬해 B 배열을 만들고, A와 B를 이용해 P배열을 구하면 된다. B 배열이 정렬돼 있으므로 B 배열에 있는 값과 A 배열에 있는 값을 비교해 P 배열에 값을 넣을 수 있다. B 배열에 있는 값을 A 배열에서 찾은 후, 찾은 A 배열의 인덱스를 그대로 몇 번째로 찾았는지 P 배열..

BOJ 2022.01.31

백준 11286 - 절댓값 힙

문제 https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 풀이 최소 힙을 이용한다. 우선순위 큐를 이용해 최소 힙을 만들고 데이터를 추가할 때 정렬 기준을 추가한다. 정렬 기준은 다음과 같다. - 절댓값이 같으면 오름차순 - 절댓값이 다르면 절댓값 오름차순 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ..

BOJ 2022.01.28

백준 2164 - 카드2

문제 https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 풀이 문제에 나와있는대로 코드를 짠다. 위에서 삭제하고 아래에 다시 붙이는 작업이 Queue의 offer와 poll과 비슷하니 Queue 를 이용해 문제를 푼다. 코드 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { static int N; static Queue ..

BOJ 2022.01.25

백준 9012 - 괄호

문제 https://www.acmicpc.net/problem/9012 9012번: 괄호 문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(conc www.acmicpc.net 풀이 스택을 이용하는 간단한 문제이다. '('일 때 스택에 push 하고 ')'일 때 스택에서 pop 한다. 스택에서 pop을 할 수 ..

BOJ 2022.01.24

프로그래머스 - 타겟 넘버

문제 https://programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr 풀이 numbers의 인덱스를 노드로 생각하고, 각 인덱스를 방문할 때마다 인덱스에 해당하는 값을 더한 값과, 뺀 값을 이용해서 dfs, bfs 탐색을 진행한다. 탐색이 끝난 후 중첩한 값과 target을 비교한다. 코드 python - dfs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ..

프로그래머스 2021.08.24

프로그래머스 - 문자열 압축

문제 https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr 풀이 문자열을 최대 len(s)/2의 길이만큼 압축할 수 있으므로 1 ~ len(s)/2 단위 길이로 모두 압축을 시도해보고, 압축 했을 때 각각의 길이를 비교해 최소 길이를 구한다. 코드 python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 def solution(s): answer = ..

프로그래머스 2021.08.22

프로그래머스 - 키패드 누르기

문제 https://programmers.co.kr/learn/courses/30/lessons/67256 코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL" programmers.co.kr 풀이 [1, 4, 7]을 눌렀을 경우에는 바로 L을 추가하고, [3, 6, 9]를 눌렀을 때는 바로 R을 추가한다. [2, 5, 8, 0]을 눌렀을 경우에는 왼쪽 손과 오른쪽 손에 있는 버튼과의 거리를 각각 구해서 비교한다. 거리를 구할 때 세로 ..

프로그래머스 2021.08.21

프로그래머스 - 크레인 인형뽑기 게임

문제 https://programmers.co.kr/learn/courses/30/lessons/64061 코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr 풀이 스택 자료구조를 이용하여 문제를 해결한다. 0이 아닌 숫자들은 스택에 저장하고 스택에 저장되어 있는 숫자들 중에 상위 2개가 같은지 비교한다. 코드 python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 def solution(board, moves): answer = 0 board = list(map(list, zip(*board))) b..

프로그래머스 2021.08.20

프로그래머스 - 124 나라의 숫자

문제 https://programmers.co.kr/learn/courses/30/lessons/12899 코딩테스트 연습 - 124 나라의 숫자 programmers.co.kr 풀이 사용하는 숫자가 3개이므로 3진법처럼 생각을 한다. 3진법과는 다르게 0이 나올 자리에 4를 넣어주면 된다. 또한 0이 존재하지 않기 때문에 0으로 나누어 떨어질 경우에 n 값을 1 빼줘야 한다. 코드 python 1 2 3 4 5 6 7 8 9 10 11 def solution(n): remains = ['4', '1', '2'] answer = '' while n > 0: idx = n % 3 answer = remains[idx] + answer n //= 3 if idx == 0: n -= 1 return answe..

프로그래머스 2021.08.19