반응형

Queue 11

(프로그래머스 KAKAO JS)두 큐 합 같게 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 큐 자료구조를 만들어서 사용하여 시간초과가 나지 않도록 한다. sum1 = queue1의 원소의 합 sum2 = queue2의 원소의 합 우선 두 큐를 직접 정의한 큐에 넣으면서, 각 큐의 총합을 구한다. 두 합이 짝수가 아니라면 -1 리턴, 만약 두 합이 같다면 0을 리턴한다. 이후는 while문을 이용해 두 큐의 합이 같아질 때까지 반복한다. 만약 현재까지의 연산 횟수 answer가 두 큐의..

(Leet Code JS) Populating Next Right Pointers in Each Node

https://leetcode.com/problems/populating-next-right-pointers-in-each-node/ Populating Next Right Pointers in Each Node - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com BFS를 이용. BFS에 이용할 queue와 같은 레벨에 있는 노드를 담을 stack을 빈 배열로 선언. answer = root로 정의. 또 다른 pointer를 root로 지정하고, count는 현재..

(SWEA c++)1249. [SW 문제해결 응용] 4일차 - 보급로

https://swexpertacademy.com/main/solvingProblem/solvingProblem.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com BFS로 문제 풀이. 핵심은 상하좌우로 이동하면서 이동하려는 좌표의 cost가 이전 cost보다 비싼 경우 가지 치기를 하여 시간을 줄이도록 하면 된다. #include #include #include #include using namespace std; int main(void) { int T; int directX[4] = {-1, 1, 0, 0}; int directY[4] = {0, 0, -1, 1}; cin >> T; for (int t ..

SW Expert Academy 2021.09.30

(TIL Day03-4)자료구조- 큐

큐(Queue) First In First Out(FIFO)라는 개념을 가진 선형 자료구조. 먼저 들어간 데이터가 먼저 출력된다. 식당에서 대기번호 표를 받았을 때를 생각하면 쉽게 이해할 수 있다. 큐의 가장 앞에 있는 원소의 인덱스(위치)는 front로 나타내며, 가장 뒤에 있는 원소의 인덱스(위치)는 rear라고 한다. 데이터 추가 enqueue 큐의 가장 마지막에 데이터를 추가한다. 데이터를 추가할수록 rear 값이 1 증가한다. 데이터 삭제 dequeue 큐의 맨 앞에 있는 원소(front)가 삭제된다. 데이터 삭제를 하면 front 값이 1 증가한다. 코드 JS에서는 큐가 제공되지 않기 때문에 배열 형태로 큐를 구현한다. class Queue { constructor() { this.queue ..

TIL 2021.08.06

(백준 c++)18258 큐 2

문제 정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 여섯 가지이다. push X: 정수 X를 큐에 넣는 연산이다. pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. size: 큐에 들어있는 정수의 개수를 출력한다. empty: 큐가 비어있으면 1, 아니면 0을 출력한다. front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. 입력 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. ..

백준 알고리즘 2021.04.12

(백준 c++)16235 나무 재테크

문제 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 떨어진 칸의 개수, c는 가장 왼쪽으로부터 떨어진 칸의 개수이다. r과 c는 1부터 시작한다. 상도는 전자통신공학과 출신답게 땅의 양분을 조사하는 로봇 S2D2를 만들었다. S2D2는 1×1 크기의 칸에 들어있는 양분을 조사해 상도에게 전송하고, 모든 칸에 대해서 조사를 한다. 가장 처음에 양분은 모든 칸에 5만큼 들어있다. 매일 매일 넓은 땅을 보면서 뿌듯한 하루를 보내고 있던 어느 날 이런 생각이 들었다. 나무 재테크를 하자! 나무 재테크란 작은 묘목을 구매해 어느정도 키운 후 팔아서 수익을 ..

백준 알고리즘 2021.04.06

(백준 c++)7562 나이트의 이동

문제 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까? 입력 입력의 첫째 줄에는 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 체스판의 한 변의 길이 l(4 ≤ l ≤ 300)이 주어진다. 체스판의 크기는 l × l이다. 체스판의 각 칸은 두 수의 쌍 {0, ..., l-1} × {0, ..., l-1}로 나타낼 수 있다. 둘째 줄과 셋째 줄에는 나이트가 현재 있는 칸, 나이트가 이동하려고 하는 칸이 주어진다. 출력 각 테스트 케이스마다 나이트가 최소 몇 번만에 이동할 수 있는지 출력한다. BFS를 이용하여 문제 ..

백준 알고리즘 2021.01.08

(SWEA c++)1225. [S/W 문제해결 기본] 7일차 - 암호생성기

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14uWl6AF0CFAYD&categoryId=AV14uWl6AF0CFAYD&categoryType=CODE SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com queue를 이용한 문제 풀이. test case는 10개인데, 문제에 써져 있지 않으므로 주의하여 코딩하자. 우선 8개의 숫자를 int형 queue인 q에 담아주자. 그리고 q.front() - count > 0일 때까지 사이클을 돈다. count는 1 ~ 5까지 빼는 수를 의미하므로, 6 이상이면 count = 1로 고쳐준다. ..

SW Expert Academy 2020.10.12

(프로그래머스 c++ KAKAO)보석 쇼핑

큐와 맵을 이용하여 문제를 푼다. 우선 string을 담을 수 있는 큐인 q와 map m을 선언한다. 그리고 보석 종류의 개수를 구하기 위한 gems_size, 진열대 시작 번호 start, 진열대 마지막 번호 end, 시작 지점 바꿔주기 위한 tmp를 0으로 초기화한다. 이제 보석 종류의 개수를 구하도록 한다. for문을 통해 gems를 순회하면서 m에 넣어주도록 한다. gems_size = m.size()로 하여 개수를 저장하고, m은 clear하여 비워주도록 한다. 다시 gems를 순회하면서 정답을 알아내면 된다. m을 초기화 하였으니 m[gems[i]] == 0이면 1을 넣어주고, 0이 아니라면 같은 보석이 이미 있는 경우이므로 해당 보석의 개수를 +1로 해준다. 그리고 q에 push. 모든 종류..

(프로그래머스 c++)가장 먼 노드

DFS/BFS에 관한 문제. DFS도 가능하지만 BFS 방식으로 풀었다. 우선 큐가 필요하다. 그리고 방문 여부를 확인하는 bool형 배열 visited, 그래프를 이어주는 bool형 배열 check를 선언하여 false로 초기화. 그리고 depth를 나타내는 int형 배열 dist도 선언하여 0으로 초기화 한다. for문으로 check 배열에 그래프를 이어준다. 사실상 상삼각행렬을 사용한다. 1부터 n까지 상삼각행렬을 그려주도록 하자. 그리고 1부터의 거리를 재야하기 때문에 큐에 1을 넣어주고, visited[1]도 true로 표시. 이제 while문으로 q가 비어잇을 때까지 반복한다. q의 앞부분을 가져오고 pop. 2 ~ n까지 for문을 돌면서 check[현재노드][i] == true && vis..

반응형