본문 바로가기

분류 전체보기411

[C++] 프로그래머스 : 타겟 넘버 https://programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr 문제 풀이 따로 벡터를 선언해서 거기에 연산자를 넣어 DFS를 구현한 문제이다! 느낀 점 어렵지는 않았다. 근데 다른 분의 코드(코드2)를 참고해보니 내 코드가 너무나도 직관적으로 구현한 코드 같다. 다음엔 조금 더 응용을 해봐야겠다. 코드1 #include #include using namespace std.. 2021. 10. 8.
[C++] 프로그래머스 : 더 맵게 https://programmers.co.kr/learn/courses/30/lessons/42626 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr 문제 풀이 우선순위 큐를 사용하면 아주 쉽게 풀 수 있는 문제이다. 큐를 우선 오름차순으로 정렬해준다. 맨 앞에 오는 값들은 스코빌 지수가 작은 순서대로 위치할 것이고 맨 앞의 스코빌 지수가 기준인 K보다 크다면 그 이후의 모든 값들은 K보다 크다. 따라서, 맨 앞의 두 개를 계산해주고 K보다 큰지만 따져주면 된다. 큐의 크기가 1인데 K보다 낮다면.. 2021. 10. 7.
[C++] 백준 2504번 : 괄호의 값 https://www.acmicpc.net/problem/2504 2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 www.acmicpc.net 문제 풀이 괄호를 다루는 스택 문제이다! 이 문제의 가장 중요한 포인트는 2가지이다. 1. 분배 법칙 2. 계산된 값을 언제 정답에 더할지 첫 번째는 쉽다. 예제를 예로 들면 (2 + 3 * 3) * 2 가 2 *2 + 3 * 3 * 2로 계산될 수 있다는 점이다. 두 번째는 생각이 필요하다. 단순하게 닫힌 괄호가 올 때마다 정답에 더한다면 우리가 원하는 값과 다른 값을 계산한다. 닫힌 괄호가 .. 2021. 10. 7.
[C++] 백준 11729번 : 하노이 탑 이동 순서 https://www.acmicpc.net/problem/11729 11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 문제 풀이 재귀에서 가장 대표적으로 뽑히는 문제이다. 가장 기본적인 개념은 다음과 같다. 기둥은 3개로 출발 지점, 도착 지점, 임시 지점으로 나눌 수 있다. 따라서 원반을 출발점에서 도착점으로 옮기려면 3단계만 거치면 된다. 1. From -> Other 2. From -> To 3. Other -> To 이 부분을 재귀적으로 구현해주면 된다! 느낀 점 분할-정복 알고리즘에 대해서 .. 2021. 10. 7.
[C++] 백준 2346번 : 풍선 터뜨리기 https://www.acmicpc.net/problem/2346 2346번: 풍선 터뜨리기 1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선 www.acmicpc.net 문제 풀이 덱에 숫자와 인덱스를 pair로 저장한다. 덱의 제일 첫 번째 값을 pop 하는데 숫자 따로 저장한다. 숫자가 양수라면 pop을 먼저하기 때문에 숫자-1 만큼 오른쪽으로 회전시킨다. 반대로 음수라면 숫자만큼 왼쪽으로 회전시키면 된다. 느낀 점 그렇게 어렵지 않은 덱 문제였다. 다르게 구현해볼까 하다가 그냥 빨리 풀었다. 코드 #include #include #inclu.. 2021. 10. 4.
[C++] 백준 10799번 : 쇠막대기 https://www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 문제 풀이 입력받은 string의 크기만큼 반복문을 돈다. '(' 다음에 바로 ')'에 오면 레이저 처리라는 것이 중요하다. 스택이 비어있거나 string[i]가 '(' 일 경우 '('을 스택에 넣어주고 막대기의 개수를 +1 해준다. 만약 string[i+1]이 ')'라면 레이저 처리하므로 막대기의 개수만큼 조각 수에 추가한다. 레이저 처리일 경우 다다음 인덱스로 넘어가야 하므로 인덱스를 +1 해준다. st.. 2021. 10. 4.