# again

31개의 포스트
post-thumbnail

[백준] 2504 : 괄호의 값 - Python

괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 X가 올바른 괄호열이면 ‘(X)’이나 ‘[X]’도 모두 올바른 괄호열이 된다. X와 Y 모두 올바른 괄호열이라면 이들을 결합한 XY도 올바른 괄호열이 된다. 예를 들어 ‘(()[]])’나 ‘(())[’ 는 올바른 괄호열이지만 ‘([)]’ 나 ‘(()()[]’ 은 모두 올바른 괄호열이 아니다. 우리는 어떤 올바른 괄호열 X에 대하여 그 괄호열의 값(괄호값)을 아래와 같이 정의하고 값(X)로 표시한다. ‘()’ 인 괄호열의 값은 2이다. ‘[]’ 인 괄호열의 값은 3이다. ‘(X)’ 의 괄호값은 2×값(X) 으로 계산된다. ‘[X]’ 의 괄호값은 3×값(X) 으로 계산된다. 올바른 괄호열 X와 Y가 결합된 XY의 괄호값은 값(XY)= 값(X)+값(Y) 로 계산된다.

2023년 5월 22일
·
0개의 댓글
·
post-thumbnail

[백준] 18111 : 마인크래프트 - Python

문제 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 땅을 파거나 집을 지을 수 있는 게임이다. 목재를 충분히 모은 lvalue는 집을 짓기로 하였다. 하지만 고르지 않은 땅에는 집을 지을 수 없기 때문에 땅의 높이를 모두 동일하게 만드는 ‘땅 고르기’ 작업을 해야 한다. lvalue는 세로 N, 가로 M 크기의 집터를 골랐다. 집터 맨 왼쪽 위의 좌표는 (0, 0)이다. 우리의 목적은 이 집터 내의 땅의 높이를 일정하게 바꾸는 것이다. 우리는 다음과 같은 두 종류의 작업을 할 수 있다. 좌표 (i, j)의 가장 위에 있는 블록을 제거하여 인벤토리에 넣는다. 인벤토리에서 블록 하나를 꺼내어 좌표 (i, j)의 가장 위에 있는 블록 위에 놓는다. 1번 작업은 2초가 걸리며, 2번 작업은 1초가 걸린다. 밤에는 무서운 몬스터들이 나오

2023년 5월 22일
·
0개의 댓글
·
post-thumbnail

[백준] 14500 : 테트로미노 - Python

테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누어져 있으며, 각각의 칸에는 정수가 하나 쓰여 있다. 테트로미노 하나를 적절히 놓아서 테트로미노가 놓인 칸에 쓰여 있는 수들의 합을 최대로 하는 프로그램을 작성하시오. 테트로미노는 반드시 한 정사각형이 정확히 하나의 칸을 포함하도

2023년 4월 7일
·
0개의 댓글
·
post-thumbnail

[백준] 15683 : 감시 - Python

감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감시할 수 있는 방법은 다음과 같다. 1번 CCTV는 한 쪽 방향만 감시할 수 있다. 2번과 3번은 두 방향을 감시할 수 있는데, 2번은 감시하는 방향이 서로 반대방향이어야 하고, 3번은 직각 방향이어야 한다. 4번은 세 방향, 5번은 네 방향을 감시할 수 있다. CCTV는 감시할 수 있는 방향에 있는 칸 전체를 감시할 수 있다. 사무실에는 벽이 있는데, CCTV는 벽을 통과할 수 없다. CCTV가 감시할 수 없는 영역은 사각지대라고 한다. CCTV는 회전시킬 수 있는데, 회전은

2023년 4월 7일
·
0개의 댓글
·
post-thumbnail

[백준] 14503 : 로봇 청소기 - Python

로봇 청소기 로봇 청소기와 방의 상태가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 방은 NxM 크기의 직사각형으로 나타낼 수 있으며, 1x1 크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북 중 하나이다. 방의 각 칸은 좌표 (r, c)로 나타낼 수 있고, 가장 북쪽 줄의 가장 서쪽 칸의 좌표가 (0, 0), 가장 남쪽 줄의 가장 동쪽 칸의 좌표가 (N-1, M-1)이다. 즉, 좌표 (r, c)는 북쪽에서 (r+1)번째에 있는 줄의 서쪽에서 (c+1)번째 칸을 가리킨다. 처음에 빈 칸은 전부 청소되지 않은 상태이다. 로봇 청소기는 다음과 같이 작동한다. 현재 칸이 아직 청소되지 않은 경우, 현재 칸을 청소한다. 현재 칸의 주변 4칸 중 청소되지 않은 빈 칸이 없는 경우, 바라보는 방향을 유지한 채로 한 칸 후진할 수 있다면 한 칸

2023년 4월 5일
·
0개의 댓글
·
post-thumbnail

[백준] 14499 : 주사위 굴리기 - Python

주사위 굴리기 크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 이 지도의 위에 주사위가 하나 놓여져 있으며, 주사위의 전개도는 아래와 같다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 2 4 1 3 5 6 주사위는 지도 위에 윗 면이 1이고, 동쪽을 바라보는 방향이 3인 상태로 놓여져 있으며, 놓여져 있는 곳의 좌표는 (x, y) 이다. 가장 처음에 주사위에는 모든 면에 0이 적혀져 있다. 지도의 각 칸에는 정수가 하나씩 쓰여져 있다. 주사위를 굴렸을 때, 이동한 칸에 쓰여 있는 수가 0이면, 주사위의 바닥면에 쓰여 있는 수가 칸에 복사된다. 0이 아닌 경우에는 칸에 쓰여 있는 수가 주사위의 바닥면으로 복사되며, 칸에 쓰여 있는 수는 0이 된다. 주사위를 놓은 곳의 좌표와 이동시키는 명령이 주어졌을 때, 주사위가 이동했을 때 마다 상단에 쓰여 있는 값을 구하

2023년 4월 5일
·
0개의 댓글
·
post-thumbnail

[백준] 3190 : 뱀 - Python

뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다. 먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다. 만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다. 만약 이동한 칸에 사과가 없다면, 몸길이를 줄여서 꼬리가 위치한 칸을 비워준다. 즉, 몸길이는 변하지 않는다. 사과의 위치와 뱀의 이동경로가 주어질 때 이 게임이 몇 초에 끝나는지 계산하라. 입력 첫째 줄에 보드의 크기 N이 주어진다. (2 ≤ N ≤ 100) 다음

2023년 4월 5일
·
0개의 댓글
·
post-thumbnail

[백준] 3085 : 사탕게임 - Python

사탕게임 상근이는 어렸을 적에 "봄보니 (Bomboni)" 게임을 즐겨했다. 가장 처음에 N×N크기에 사탕을 채워 놓는다. 사탕의 색은 모두 같지 않을 수도 있다. 상근이는 사탕의 색이 다른 인접한 두 칸을 고른다. 그 다음 고른 칸에 들어있는 사탕을 서로 교환한다. 이제, 모두 같은 색으로 이루어져 있는 가장 긴 연속 부분(행 또는 열)을 고른 다음 그 사탕을 모두 먹는다. 사탕이 채워진 상태가 주어졌을 때, 상근이가 먹을 수 있는 사탕의 최대 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 보드의 크기 N이 주어진다. (3 ≤ N ≤ 50) 다음 N개 줄에는 보드에 채워져 있는 사탕의 색상이 주어진다. 빨간색은 C, 파란색은 P, 초록색은 Z, 노란색은 Y로 주어진다. 사탕의 색이 다른 인접한 두 칸이 존재하는 입력만 주어진다. 출력 첫째 줄에 상근이가 먹을 수 있는 사탕의 최대 개수를 출력한다. 😀 코멘트 해당 문제를

2023년 3월 9일
·
0개의 댓글
·
post-thumbnail

[프로그래머스/Python] - Lv2 / 큰 수 만들기

큰 수 만들기 level2-그리디-큰 수 만들기 코멘트 핵심은 스택을 활용하는 것이었다. data를 순회하면서 res가 비었다면 data를 넣어주고, 만약 존재한다면 이제 현재 숫자와 res에 저장된 숫자 사이에서 마지막 값과 비교를 진행한다. k>0, 스택이 비어있지 않아야 하고, 마지막 값이 더 작아야하고.. 등등 직관적으로 해결하면 된다. 하지만 다 끝나고도 k가 0보다 큰 경우가 있을 수도 있다. 그렇기에 해당 경우를 생각해서 마지막 조건을 처리해준다면 끝난다!

2023년 3월 3일
·
0개의 댓글
·
post-thumbnail

[프로그래머스/Python] - Lv2 / 조이스틱

조이스틱 level2-그리디-조이스틱 코멘트 굉장히 어려웠다. 결국 연속된 A의 개수가 군데군데 있을 수도 있기에... 고려해야할 것은 해당 위치까지의 최단거리 + 해당 알파벳 변경횟수 이게 핵심인제 A의 위치마다 이제 계산을 해줘야 한다. 매번 인덱스마다 계산을 해주는 것이 베스트라고 생각했다.

2023년 3월 3일
·
0개의 댓글
·
post-thumbnail

[프로그래머스/Python] - Lv2 / 모음사전

모음사전 level2-완저탐색-모음사전 😀 코멘트 해당 문제를 풀 때 예시들을 보고 규칙성을 파악했다. 결국 현재 무슨 글자가 온다면.. 그 이전 문자들의 개수를 카운팅 할 수 있다고 생각했기에 완탐으로도 충분히 구할 수 있다 !! 55분... 일단 규칙을 찾고 구현을 하는데 오래걸렸지 생각하는 것은 그래도 할만했다.

2023년 3월 1일
·
0개의 댓글
·
post-thumbnail

[프로그래머스/Python] - Lv3 / 여행경로

여행경로 level3-DFS-여행경로 문자열 노드 이 문제처럼 노드의 값이 문자열인 경우 defaultdict를 사용하여 인접리스트를 만들자. 그리고 인접 노드들을 추가해준 후, 방문 체크하는 리스트 역시 defaultdict(list)로 만드는 것이 편하다. 이렇게 해서 그래프를 만들었다면 이제 원래 하던 방식대로 경로를 구해주면 된다. 코멘트 문자열 노드로 인접리스트 만들기. 다시 풀어봐야 함. 이 문제에서 핵심은 백트랙킹을 반드시 해줘야만 한다. 왜냐하면 무조건 경로의 우선적인 것부터 들어간다고 해서 최종적으로 모두 탐색할 수 있는 것이 아니다. 뒤에 있는 경로 먼저 탐색해야 도달할 수도 있기 때문. 그렇기에 백트랙킹 시 원상복구 과정이 필요했다 !! 🎈 다시 풀어봄

2023년 2월 28일
·
0개의 댓글
·
post-thumbnail

좌표 문제

프로그래머스_아이템 줍기 아이템 줍기 🎈 코멘트 해당 문제는 우선 테두리를 포함한 사각형(테두리 + 내부)을 1로 채운다. 그리고 사각형 테두리를 0으로 채워 가장 바깥쪽 테두리만 남긴다. 마지막으로 탐색을 통해 캐릭터와 아이템 사이의 최단 경로를 구한다. 1. 좌표를 2배로 확대 주어진 좌표에 따라 사각형을 그려보면, 좌표가 인접한 경우 탐색을 제대로 하기 어렵다. 따라서 좌표를 2배로 확대해서, 테두리 사이의 공간을 마련해 주어야 한다. 이럴 경우를 대비해서 좌표를 그릴 때 2를 곱해서 그려주고, 구한 최단거리를 다시 2로 나눠주면 된다.

2023년 2월 28일
·
0개의 댓글
·
post-thumbnail

[백준] 4803 : 트리 - Python

트리 그래프는 정점과 간선으로 이루어져 있다. 두 정점 사이에 경로가 있다면, 두 정점은 연결되어 있다고 한다. 연결 요소는 모든 정점이 서로 연결되어 있는 정점의 부분집합이다. 그래프는 하나 또는 그 이상의 연결 요소로 이루어져 있다. 트리는 사이클이 없는 연결 요소이다. 트리에는 여러 성질이 있다. 예를 들어, 트리는 정점이 n개, 간선이 n-1개 있다. 또, 임의의 두 정점에 대해서 경로가 유일하다. 그래프가 주어졌을 때, 트리의 개수를 세는 프로그램을 작성하시오. 입력 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 n ≤ 500과 m ≤ n(n-1)/2을 만족하는 정점의 개수 n과 간선의 개수 m이 주어진다. 다음 m개의 줄에는 간선을 나타내는 두 개의 정수가 주어진다. 같은 간선은 여러 번 주어지지 않는다. 정점은 1번부터 n번까지 번호가 매겨져 있다. 입력의 마지막 줄에는 0이 두 개 주어진다. 출력

2023년 2월 28일
·
0개의 댓글
·
post-thumbnail

[백준] 1966 : 프린터 큐 - Python

프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를 확인한다. 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 이 문서를 인쇄하지 않고 Queue의 가장 뒤에 재배치 한다. 그렇지 않다면 바로 인쇄를 한다. 예를 들어 Queue에 4개의 문서(A B C D)가 있고, 중요도가 2 1 4 3 라면 C를 인쇄하고, 다음으로 D를 인쇄하고 A, B를 인쇄하게 된다. 여러분이 할 일은, 현재 Queue에 있는 문서의 수와 중요도가 주어졌을 때, 어떤

2023년 2월 22일
·
0개의 댓글
·
post-thumbnail

[백준] 7568 : 덩치 - Python

덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩치가 각각 (x, y), (p, q)라고 할 때 x > p 그리고 y > q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56, 177), (45, 165) 라고 한다면 A의 덩치가 B보다 큰 셈이 된다. 그런데 서로 다른 덩치끼리 크기를 정할 수 없는 경우도 있다. 예를 들어 두 사람 C와 D의 덩치가 각각 (45, 181), (55, 173)이라면 몸무게는 D가 C보다 더 무겁고, 키는 C가 더 크므로, "덩치"로만 볼 때 C와 D는 누구도 상대방보다 더 크다고 말할 수 없다. N명의 집단에서 각 사람의 덩치 등수는 자신보다 더 "큰 덩치"의 사람의 수로 정해진다. 만일 자신보다 더 큰 덩

2023년 2월 22일
·
0개의 댓글
·
post-thumbnail

[백준] 8979 : 올림픽 - Python

올림픽 올림픽은 참가에 의의가 있기에 공식적으로는 국가간 순위를 정하지 않는다. 그러나, 많은 사람들이 자신의 국가가 얼마나 잘 하는지에 관심이 많기 때문에 비공식적으로는 국가간 순위를 정하고 있다. 두 나라가 각각 얻은 금, 은, 동메달 수가 주어지면, 보통 다음 규칙을 따라 어느 나라가 더 잘했는지 결정한다. 금메달 수가 더 많은 나라 금메달 수가 같으면, 은메달 수가 더 많은 나라 금, 은메달 수가 모두 같으면, 동메달 수가 더 많은 나라 각 국가는 1부터 N 사이의 정수로 표현된다. 한 국가의 등수는 (자신보다 더 잘한 나라 수) + 1로 정의된다. 만약 두 나라가 금, 은, 동메달 수가 모두 같다면 두 나라의 등수는 같다. 예를 들어, 1번 국가가 금메달 1개, 은메달 1개를 얻었고, 2번 국가와 3번 국가가 모두 은메달 1개를 얻었으며, 4번 국가는 메달을 얻지 못하였다면, 1번 국가가 1등, 2번 국가와 3번 국가가 공동 2등, 4번 국가가 4등이 된다. 이

2023년 2월 22일
·
0개의 댓글
·
post-thumbnail

[백준] 6550 : 부분 문자열 - Python

부분 문자열 2개의 문자열 s와 t가 주어졌을 때 s가 t의 부분 문자열인지 판단하는 프로그램을 작성하라. 부분 문자열을 가지고 있는지 판단하는 방법은 t에서 몇 개의 문자를 제거하고 이를 순서를 바꾸지 않고 합쳤을 경우 s가 되는 경우를 이야기 한다. 입력 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문자열 s 와 t가 빈칸을 사이에 두고 들어온다. s와 t의 길이는 10만을 넘지 않는다. 출력 입력된 s와 t의 순서대로 s가 t의 부분 문자열인 경우 Yes라 출력하고 아닐 경우 No라고 출력한다. ⚽ 코멘트 해당 문제는 제대로 생각했어야 했다. 한쪽의 인덱스를 고정시켜서 다른 쪽과 같은 것이 있으면 idx를 증가시키는 이 과정을 이해했어야 했는데, 이걸 몰라서 풀지 못했었다.. s가 t에 포함되는지를 확인하는 것이기 때문에 s의 인덱싱을 고정시키고 t의 인덱스를 움직이면서 존재하면

2023년 2월 20일
·
0개의 댓글
·
post-thumbnail

[백준] 1238 : 파티 - Python

파티 N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다. 어느 날 이 N명의 학생이 X (1 ≤ X ≤ N)번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 있고 i번째 길을 지나는데 Ti(1 ≤ Ti ≤ 100)의 시간을 소비한다. 각각의 학생들은 파티에 참석하기 위해 걸어가서 다시 그들의 마을로 돌아와야 한다. 하지만 이 학생들은 워낙 게을러서 최단 시간에 오고 가기를 원한다. 이 도로들은 단방향이기 때문에 아마 그들이 오고 가는 길이 다를지도 모른다. N명의 학생들 중 오고 가는데 가장 많은 시간을 소비하는 학생은 누구일지 구하여라. 입력 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어온다. 시작점과 끝점이 같은 도로는 없으며

2023년 2월 18일
·
0개의 댓글
·
post-thumbnail

[백준] 10844 : 쉬운 계단 수 - Python

쉬운 계단 수 45656이란 수를 보자. 이 수는 인접한 모든 자리의 차이가 1이다. 이런 수를 계단 수라고 한다. N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구해보자. 0으로 시작하는 수는 계단수가 아니다. 입력 첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다. 출력 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. ⚽ 코멘트 이 문제는 조건을 잘 파악해야 한다. 0을 제외한 모든 숫자는 앞에 올 수 있다. 1~8은 뒤에 올 수 있는 숫자가 총 2종류이다. (숫자 앞뒤로) 하지만 9뒤에는 오직 숫자 8만 올 수 있다 ⚽ 각 자리수에서 맨 뒤에 올 수 있는 숫자가 무엇인지에 대해서 생각하자. dp일 것 같은 문제에서는 마지막 항이 무엇이면 이런 생각을 해보자. n=1 → n=2로 바뀔 때 이제 이 때를 잘 파악했어야 했다. dp

2023년 2월 18일
·
0개의 댓글
·