10

두 큐 합 같게 만들기 - lv2

문제 코딩테스트 연습 - 두 큐 합 같게 만들기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 큐에서 popleft 해서 다른 큐에 append 하는 과정은 마치 두 큐를 하나의 리스트로 이어놓은 다음, 두개의 포인터를 계속해서 옮겨가는 과정과 같다. 따라서 start, end를 queue1의 첫번째 인덱스와 마지막 인덱스로 초기화한 뒤, 만약 두 큐 원소들의 합의 절반 값인 target 보다 start부터 end까지의 구간 합 now 가 크다면 start에 1을 더하면서 원래 start에 있..

17822번 - 원판 돌리기

문제 17822번: 원판 돌리기 (acmicpc.net) 17822번: 원판 돌리기 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀 www.acmicpc.net 풀이 간단한 구현 문제지만, 각 행이 큐로 되어있어 인접 노드를 탐색할 때 주의해야한다. 어이없게도 "배수"를 반복문을 통해 2배씩 곱해주는 것으로 계산해서 많은 시간을 날렸다. 또한 평균을 구할 때 cnt 가 0이 되는 때도 있음을 주의해야한다. from collections import deque N,M,T = map(int,input().split()) # 0:W 1:R 2:B circ..

PS/백준 2022.10.12

[인증평가(3차) 기출] 교차로 - lv3

문제 Softeer Softeer 자율주행차가 아래와 같은 교차로를 통과하는 상황을 생각하여 보자. 이 문제에서 다루는 교차로에서는 직진만 가능하기 때문에, 아래 그림과 같은 네 가지 방법으로만 교차로 softeer.ai 풀이 N만큼 반복문을 돌며 교차로에 새로 들어서는 차량의 도착 시간 및 방향을 입력받아 입력된 차량들이 교차로를 지나간 시간이 어떻게 되는지 출력하는 문제이다. 따라서 시간의 흐름에 따라 교통상황이 어떻게 흘러가는지 면밀하게 살펴 문제에 접근할 필요가 있다. 시간의 흐름을 구현하는것이 핵심이며, 새로 차량 정보가 입력되면 그 이전 시점까지의 교통 상황을 정리하면 된다. 1초 동안, 만약 차량들이 서로 마주보고 있다면 동시에 지나갈수 있고 그렇지 않다면 오직 하나의 차량만 지나갈 수 있다..

PS/Softeer 2022.10.02

16235번 - 나무 재테크

문제 16235번: 나무 재테크 (acmicpc.net) 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net 풀이 1 이 문제에서는 두가지의 교훈을 얻을 수 있다. "아기 상어" 문제에서 얻은 교훈과 마찬가지로, 일단 탐색은 모든 경우를 탐색하며 조건문으로 거르는 방식을 시도해본뒤, 시간 초과가 나면 그 다음에 미리 풀을 좁혀놓고 탐색하는 방법을 시도하자는 것이다. 즉, 일단 볼것도없이 행-열 탐색을 싹다 해버려야지, 미리 좌표를 뽑아놓고 반복문을 돌리지 말자는 것이다! 이 문제의 경우, 한 곳에 ..

PS/백준 2022.09.01

행렬 테두리 회전하기 (lv2)

문제 설명 rows x columns 크기인 행렬이 있습니다. 행렬에는 1부터 rows x columns까지의 숫자가 한 줄씩 순서대로 적혀있습니다. 이 행렬에서 직사각형 모양의 범위를 여러 번 선택해, 테두리 부분에 있는 숫자들을 시계방향으로 회전시키려 합니다. 각 회전은 (x1, y1, x2, y2)인 정수 4개로 표현하며, 그 의미는 다음과 같습니다. x1 행 y1 열부터 x2 행 y2 열까지의 영역에 해당하는 직사각형에서 테두리에 있는 숫자들을 한 칸씩 시계방향으로 회전합니다. 다음은 6 x 6 크기 행렬의 예시입니다. 이 행렬에 (2, 2, 5, 4) 회전을 적용하면, 아래 그림과 같이 2행 2열부터 5행 4열까지 영역의 테두리가 시계방향으로 회전합니다. 이때, 중앙의 15와 21이 있는 영역은..

캐시 (lv2)

문제 설명 캐시 지도개발팀에서 근무하는 제이지는 지도에서 도시 이름을 검색하면 해당 도시와 관련된 맛집 게시물들을 데이터베이스에서 읽어 보여주는 서비스를 개발하고 있다. 이 프로그램의 테스팅 업무를 담당하고 있는 어피치는 서비스를 오픈하기 전 각 로직에 대한 성능 측정을 수행하였는데, 제이지가 작성한 부분 중 데이터베이스에서 게시물을 가져오는 부분의 실행시간이 너무 오래 걸린다는 것을 알게 되었다. 어피치는 제이지에게 해당 로직을 개선하라고 닦달하기 시작하였고, 제이지는 DB 캐시를 적용하여 성능 개선을 시도하고 있지만 캐시 크기를 얼마로 해야 효율적인지 몰라 난감한 상황이다. 어피치에게 시달리는 제이지를 도와, DB 캐시를 적용할 때 캐시 크기에 따른 실행시간 측정 프로그램을 작성하시오. 입력 형식 캐..

3190번 - 뱀

문제 3190번: 뱀 (acmicpc.net) 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 풀이 1 뱀의 머리가 벽 또는 자신의 몸에 닿으면 프로그램이 종료되어야 하므로, deque에 뱀이 차지하고 있는 좌표들을 넣는것이 핵심이다. 또한 보드의 크기가 최대 100까지로 제한되어 있는 것에 착안하여 뱀을 1초 씩 이동시키며 주어진 조건을 확인 하는 완전탐색의 방법이 유효하다는 것을 알 수 있다. 처음에 입력된 방향 변환 정보를 모두 사용하고, 이후로는 방향 전환이 없으므로 바라보고 있는 방향으로 직진하여 벽 또는 ..

PS/백준 2022.08.08

디스크 컨트롤러 (lv3)

문제 코딩테스트 연습 - 디스크 컨트롤러 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 매 순간마다 현재 디스크가 유휴 상태인지, 아닌지 확인한 뒤, 유휴 상태라면 앞 순서의 요청부터 처리하고 아니라면 가장 작업 시간이 적게 소요되는 요청을 먼저 처리하도록 하는 문제이다. 매번 시간이 갱신 될 때마다, 현재 작업 중인 요청의 완료 시간보다 앞서 요청된 작업들은 대기열에 넣어놓는다. 만약 대기열이 비어있으면, 더이상 현재 시간까지는 아직 요청된 작업이 없다는 뜻이니 새로운 요청을 받아 수행한다...

다리를 지나는 트럭 (lv2)

문제 설명 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다. 예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다. 경과 시간다리를 지난 트럭다리를 건너는 트럭대기 트럭 0 [] [] [7,4,5,6] 1~2 [] [7] [4,5,6] 3 [7] [4] [5,6] 4 [7] [4,5] [..

프린터 (lv2)

문제 설명 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다. 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 ..