알고리즘 문제분석(35)
-
[그래프&구현] 백준 2251번 물통
https://www.acmicpc.net/problem/2251 2251번: 물통 각각 부피가 A, B, C(1≤A, B, C≤200) 리터인 세 개의 물통이 있다. 처음에는 앞의 두 물통은 비어 있고, 세 번째 물통은 가득(C 리터) 차 있다. 이제 어떤 물통에 들어있는 물을 다른 물통으로 쏟아 부 www.acmicpc.net 난이도 : 실버 1 수행 시간 : 45분 브루트 포스적인 방법으로 풀었다. 최종 값까지 달성할때, 다른 값들을 모두 ans 벡터에 저장해놓는 방식. Queue를 이용한 BFS적인 접근을 통해 구현할 수 있다. 핵심 알고리즘은 a->b,c / b->a,c / c->a,b의 6가지 경우의 수를 모두 구현해 주면 해결된다. #include #include #include #inclu..
2022.01.03 -
[그리디] 프로그래머스 "구명보트"
https://programmers.co.kr/learn/courses/30/lessons/42885 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 수행시간 : 30분 / 난이도 : 레벨 2 얼핏보면 일반적인 투포인터 문제라고 생각할 수 있다. 하지만 처음 로직을 짤 때, 문제에서 요구하는 그리디적인 로직이 필요하다. 우선, 소팅을 통해 가장 작은값부터 큰값까지 정렬을 한다. 처음 로직을 짰을때는, 정렬 후 가장 작은값부터 비교해가면서 i번째 + (i+1)번째 의 값이 limit를..
2021.06.27 -
[스택&구현] 프로그래머스 "짝지어 제거하기"
https://programmers.co.kr/learn/courses/30/lessons/12973 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr 수행시간 : 40분 / 난이도 : 레벨 2 로직을 짤때 스택을 생각 안하고 재귀적으로 제거하려 했다가 시간을 엄청 소비했다. 같이 문제푸는 친구가 힌트를 살짝줘서 스택으로 구현 완료했다. 로직은, 스택의 top과 vector의 인덱스를 하나씩 비교하면서 같으면, pop 다르면 push 해주는 간단한 알고리즘이다. #include #include #i..
2021.06.26 -
[BFS] 프로그래머스 "카카오프렌즈 컬러링북"
https://programmers.co.kr/learn/courses/30/lessons/1829 코딩테스트 연습 - 카카오프렌즈 컬러링북 6 4 [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] [4, 5] programmers.co.kr 수행시간 : 30분 / 난이도 : 레벨 2 요즘 코테준비한다고 프로그래머스에서도 문제풀이를 시작했다! 우선 레벨 2 난이도를 모두 정복하고 레벨 3 으로 넘어갈 것같다. 혹시 여러분들도 프로그래머스로 코테를 준비한다면 2가지 규칙을 정해놓고 푸는 것을 추천한다. 1. 외부 IDE 절때 금지 : 실제 코테에서 대부분 IDE를 못쓰게 하므로 프로그래머스 자체 IDE를 ..
2021.06.26 -
[백트래킹] 백준 1987 알파벳
https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 수행시간 : 1시간 / 난이도 : 골드 4 이 문제의 핵심 로직은 다음 방문할 목적지를 찾을때 조건 2가지 설정해주기, char와 bool 배열 간의 형변환(아스키코드 이용)해주기 정도. 어렵지 않게 풀 수 있는 재귀+그래프 문제. #include #include using namespace std; int r, c; char v_map[21][21]; int dx[4] = { 0,0,-1..
2021.06.24 -
[투포인터] 백준 3273 두 수의 합
https://www.acmicpc.net/problem/3273 3273번: 두 수의 합 n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 www.acmicpc.net 수행시간 : 15분 / 난이도 : 실버 3 저번 포스팅에서 설명한 투포인터 알고리즘을 그대로 이용하면 쉽게 풀 수 있는 문제였다. max, min 값을 벡터의 인덱스로 접근하게 설정해주기! #include #include #include using namespace std; int ans = 0; void sol(vector a, int x,..
2021.06.24