알고리즘 78

백준 13549번 숨바꼭질 3

문제 보러가기 : https://www.acmicpc.net/problem/13549 13549번: 숨바꼭질 3 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 이번 문제는 너비 우선 탐색(BFS) 문제였습니다. 《문제 풀이》 1. 순간이동을 하는 경우에는 0초가 걸리므로 우선순위 큐를 이용하여 정렬 2. { 0, N } 을 큐에 삽입 (0은 경과 시간) 3. 순간이동을 하는 경우가 경과 시간이 가장 짧으므로 해당 if 문을 가장 위에 작성 4. 큐에 삽입할 때 해당 위치의 visited 배열 true ..

알고리즘/BOJ 2021.01.16

백준 12851번 숨바꼭질 2

문제 보러가기 : https://www.acmicpc.net/problem/12851 12851번: 숨바꼭질 2 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 www.acmicpc.net 이번 문제는 너비 우선 탐색(BFS) 문제였습니다. 《문제 풀이》 1. { N, 0 } 을 큐에 삽입 (0은 경과 시간) 2. 동생을 가장 빠른 시간으로 찾는 방법의 수를 구해야 하므로 pop 이후에 방문 체크 3. 수빈이가 갈 수 있는 세 가지 위치가 범위에 충족되면 큐에 삽입 4. 최초로 동생 위치에 도달한 경우, 경과 시간을 result..

알고리즘/BOJ 2021.01.16

백준 16953번 A → B

문제 보러가기 : https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. www.acmicpc.net 이번 문제는 너비 우선 탐색(BFS) 문제였습니다. 《문제 풀이》 1. A → B 로 바꾸는 과정에서 int 범위를 벗어날 수 있으므로 long long 자료형 사용 2. { A, 0 } 을 큐에 삽입 (0은 연산횟수) 3. 현재값에 2를 곱한 값과 가장 오른쪽에 1을 더한 값을 큐에 삽입 4. 현재값이 B와 같다면 연산횟수 + 1 반환 5. 현재값이 B보다 크다면, 더 연산해도 B가 나올 수 없으므로 continue 《C++ 코드》 #include #include using namespace std; ..

알고리즘/BOJ 2021.01.16

[프로그래머스] 주식 가격

programmers.co.kr/learn/courses/30/lessons/42584?language=c 코딩테스트 연습 - 주식가격 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00 programmers.co.kr 이번 문제는 스택(stack) 문제였습니다. 📝 문제 풀이 1. 주식 가격이 떨어졌는지 확인하기 위한 스택 s를 선언 2. 주식 가격이 떨어졌다면, 현재까지의 시간 - 주식가격이 기록된 시간을 해당 시점에 저장 ⭐️ 3. while 문이 종료될 때마다 초(인덱스)를 s에 삽입 4. 마지막 시점까지 가격이 떨어지지 않..

백준 15663번 N과 M (9)

문제 보러가기 : https://www.acmicpc.net/problem/15663 15663번: N과 M (9) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 이번 문제는 백트래킹(BackTracking) 문제였습니다. 《문제 풀이》 1. N개의 수를 중복없이 담을 v 벡터 2. 중복된 수만큼 사용하기 위해 cnt[10000] 배열 선언 3. result[0] 부터 시작하기 위해 NandM(0) 호출 4. result 배열에 수를 저장할 때마다 cnt[v[i]]-- 5. 재귀 호출 후, 다시 cnt[v[i]]++ 《C++ 코드》 #i..

알고리즘/BOJ 2021.01.11

[백준] 15654번 N과 M (5) C++

문제 보러가기 : https://www.acmicpc.net/problem/15654 15654번: N과 M (5) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net 이번 문제는 백트래킹(BackTracking) 문제였습니다. 백트래킹(backtracking)이 무엇인지 모르겠다면 이전 블로그를 참고해주세요 😊 《문제 풀이》 1. N개의 수를 입력받을 arr 배열과 순열을 출력하기 위한 result 배열 선언 2. 중복 순열은 출력하면 안되므로 boolean 타입의 visited 배열 필요 3. 사전 순으로 증가하는 순서로 출력하기 ..

알고리즘/BOJ 2021.01.09

[백준] 15650번 N과 M (2) C++

문제 보러가기 : https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 이번 문제는 백트래킹(BackTracking) 문제였습니다. 문제를 풀이하기 전에 백트래킹(BackTracking)이 무엇인지 알아보겠습니다. 백트래킹(BackTracking) 백트래킹(backtracking)이란, 모든 곳을 방문하여 노드의 개수가 많아질 때 비효율적일 수 있는 DFS에 가지치기(Prunung)를 통해 가도 되지 않는 루트는 고려하지 않고 탐색하는 완전 탐색 ..

알고리즘/BOJ 2021.01.07

[백준] 11053번 가장 긴 증가하는 부분 수열 C++

문제 보러가기 : https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 이번 문제는 다이나믹(Dynamic) 프로그래밍 문제였습니다. 《문제 풀이》 1. 크기가 N인 arr 배열의 원소 입력 2. 가장 긴 증가하는 부분 수열의 길이를 구하기 위한 새로운 cnt 배열 생성 3. cnt 배열을 모두 1로 초기화 (자기 자신의 가장 긴 증가하는 부분 수열의 길이는 항상 1임) ..

알고리즘/BOJ 2021.01.05
반응형