Algorithm/Stack & Queue 14

[백준] 3190 뱀 (Python 파이썬)

https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 문제 설명 뱀 꼬리물기 문제이다. 뱀이 사과를 먹으면 점점 꼬리를 늘려가게 되며 뱀의 머리가 꼬리에 닿거나 벽에 닿으면 끝나는 게임이다. 뱀의 꼬리를 이동시키는 부분을 큐로 구현하는 부분이 핵심이다. 풀이 과정 이 문제는 큐를 이용한 구현 문제로 다음과 같이 접근하였다. ① 먼저 그래프(맵)을 모두 0으로 채워준다. ② 사과 위치는 모두 2로 채워준다. ③ 앞으로 뱀이 차지하고 있는 부분은 1로 채워줄 ..

[백준] 2504 괄호의 값 (Python 파이썬)

https://www.acmicpc.net/problem/2504 2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 www.acmicpc.net 문제 설명 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 X가 올바른 괄호열이면 ‘(X)’이나 ‘[X]’도 모두 올바른 괄호열이 된다. X와 Y 모두 올바른 괄호열이라면 이들을 결합한 XY도 올바른 괄호열이 된다. 예를 들어 ‘(()[[]])’나 ..

[프로그래머스] 줄 서는 방법 (Python 파이썬)

programmers.co.kr/learn/courses/30/lessons/12936 코딩테스트 연습 - 줄 서는 방법 n명의 사람이 일렬로 줄을 서고 있습니다. n명의 사람들에게는 각각 1번부터 n번까지 번호가 매겨져 있습니다. n명이 사람을 줄을 서는 방법은 여러가지 방법이 있습니다. 예를 들어서 3명의 사람 programmers.co.kr 문제 설명 입력으로 n과 k를 입력받는다. 1번부터 n번까지 n명의 사람들이 줄을 서 있다. 이 n명의 사람이 줄을 서는 방법에는 여러가지가 있는데, 방법을 사전 순으로 정렬하였을 때 제일 첫 방법을 1번째 방법, 마지막 방법을 n번째 방법이라 하자. 이 때, k번째 방법을 구하면 된다. 풀이 과정 처음 배열(answer)는 1부터 n번까지 차례대로 [1,2,3..

[프로그래머스] 괄호 변환 (2020 KaKao Blind ) Python 파이썬풀이

programmers.co.kr/learn/courses/30/lessons/60058 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 programmers.co.kr 문제 설명 잘못된 괄호를 올바른 괄호 형식으로 바꾸는 문제입니다. 실제 카카오 코딩테스트 기출문제 답게 문제가 상당히 길어서 위 링크를 꼭 확인하시길 바랍니다. 문제에 대한 설명이 위 링크에 자세히 나옵니다! 풀이 과정 스택을 이용한 단순 구현 문제입니다. 해당 설명에 따라서 그대로 구현만 해주시면 특별히 어려움은 없을거에요. 코드에 대해 궁금하신 사항이 있으시면 댓글 남겨주세..

[백준] 5430번 AC (Python 파이썬)

www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 문제 설명 선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다. 함수 R은 배열에 있는 숫자의 순서를 뒤집는 함수이고, D는 첫 번째 숫자를 버리는 함수이다. 배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다. 함수는 조합해서 한 번에 사용할 수 있다. 예를 들어, "RDD"는 배열을 뒤집은 다음 처음 두 숫자를 버리는 함수이다. 배열의 ..

[백준] 1021번 회전하는 큐 (Python 파이썬)

문제 설명 지민이는 N개의 원소를 포함하고 있는 양방향 순환 큐를 가지고 있다. 지민이는 이 큐에서 몇 개의 원소를 뽑아내려고 한다. 지민이는 이 큐에서 다음과 같은 3가지 연산을 수행할 수 있다. 첫 번째 원소를 뽑아낸다. 이 연산을 수행하면, 원래 큐의 원소가 a1, ..., ak이었던 것이 a2, ..., ak와 같이 된다. 왼쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 a2, ..., ak, a1이 된다. 오른쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 ak, a1, ..., ak-1이 된다. 큐에 처음에 포함되어 있던 수 N이 주어진다. 그리고 지민이가 뽑아내려고 하는 원소의 위치가 주어진다. (이 위치는 가장 처음 큐에서의 위치이다.) 이때..

[백준] 1966번 프린터 큐 (Python 파이썬)

www.acmicpc.net/problem/1966 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 문제 설명 프린터는 FIFO(First In First Out) 즉 선입 선출의 구조로 문서를 출력하게 된다. 하지만 문제의 프린터에는 조건이 있다. 문서마다 중요도가 기록되어 있는데, 자신보다 중요도가 높은 문서가 하나라도 자신의 뒤에 있으면 자신은 맨 뒤로 밀려나게 된다. 예를 들어, A B C D 라는 4개의 문서의 중요도가 2 1 4 3이라면 2가 밀려나고 1이 밀려나고 4가 제일 먼저 출력되어 3 2 1 ..

[백준] 11866번 요세푸스 문제 0 (Python 파이썬)

www.acmicpc.net/problem/11866 11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net 문제 설명 1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 이다. N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오. 풀이 과정 N = 7, ..

[백준] 17298번 오큰수 (Python 파이썬)

www.acmicpc.net/problem/17298 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 문제 설명 수열이 주어질 때, 수열의 각 원소Ai를 기준으로 오른쪽에 위치한 원소중 Ai보다 크면서 가장 왼쪽에 있는 수를 출력해야 한다. 단, 없을 경우 -1를 출력한다. 예를 들어, A=[3, 5, 2, 7] 이라는 수열이 있을 때 3의 오른쪽에 있으면서 3보다 큰 수 중 가장 왼쪽에 있는 원소는 5이고 5의 오른쪽에 있으면서 5보다 큰 수 중 가장 왼쪽에 있는 원소는 7이다. 그래서 [5, 7, 7, -1] 이라는 정답..

[백준] 1874번 스택 수열 (Python 파이썬)

www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제 설명 문제가 조금 이해하기 어려울 수 있는데, 스택에 수를 push 할 때는 반드시 오름차순으로만 push할 수 있다. 예를 들어, 8을 push해야 한다면 앞의 1~7까지를 모두 push하고 8을 push할 수 있다. 그리고 스택을 쌓다가 필요한 타이밍에 pop을 하게 되는데, 이 pop을 한 수들을 쭉 나열했을 때, N줄..