목록분류 전체보기 (370)
GitHubSeob

문제 https://www.acmicpc.net/problem/21314 21314번: 민겸 수 민겸 수 하나가 주어진다. 민겸 수는 대문자 M과 K로만 이루어진 문자열이며, 길이는 3,000을 넘지 않는다. www.acmicpc.net 문제풀이 가장 큰 수는 K가 나올 때까지 기다렸다가 K가 나오면 M과 합치면 된다. K가 나오지 않은 채로 끝나면 남은 M들은 다 1로 바꿔야 가장 큰 수가 된다. 가장 작은 수는 K가 나오면 바로바로 5를 더한다. string largest(string num) { int idx(0), idx2(0), m_cnt(0); string answer(""); for (idx = 0; idx < num.size(); ++idx) { if (num[idx] == 'M') { +..

문제 https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. www.acmicpc.net 문제풀이 이런 문제는 B를 A로 만드는 과정을 탐색하는 게 더 쉬운 것 같다. B를 A로 만드는 과정 중 할 수 있는 것은 두 가지이다. B가 짝수 일 때 2로 나누는 것, B의 일의 자리숫자가 1일 때 1을 없애는 것. 이 이외의 경우는 B를 A로 만들 수 없는 경우이므로 -1을 출력하면 된다. 반복문을 돌려 B가 A가 될 때까지 반복을 한다. B를 10으로 나눈 나머지가 1이면 B를 10으로 나누고, B가 짝수이면 B를 2로 나눈다. B가 A보다 작게되면 만들 수 없으므로 -1을, 위의 두 가지 행동을 할 수 없..

문제 https://school.programmers.co.kr/learn/courses/30/lessons/138476 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 우선순위 큐를 이용하여 풀었다. 정렬을 한 뒤, 이번 귤과 다음귤이 같지 않으면 cnt값을 우선순위 큐에 push 한다. 그렇게 되면 우선순위 큐에는 크기가 같은 귤들이 몇 개씩 있는지, 개수만 들어간다. 따로 정렬 설정을 안 했으므로 우선순위 큐 top부분에는 가장 큰 숫자가 들어간다. 반복문을 돌려 K가 0 이하가 될 때까지 K - pq.top()을 하여 상자에 귤을 담는다. ..

문제 https://school.programmers.co.kr/learn/courses/30/lessons/12914 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 n이 1이면 1, n2이 2이면 1+1, 2 = 2개 n이 3이면 1+1+1, 2+1, 1+2 .... n개는 n-2의 모든 경우에서 +2를 더한 것과 같고, n-1의 모든 경우에서 +1을 더한 것과 같다. 따라서 DP[n] = DP[n-1] + DP[n-2]이다. n이 0일 때, 1일 때는 따로 1로 값을 저장하고, 2부터는 반복문을 돌리면 된다. 나머지 연산 꼭! 코드 #incl..

문제 https://school.programmers.co.kr/learn/courses/30/lessons/12953 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 유클리드 호제법으로 최대공약수(gcd)를 구하고 최대공약수를 이용해 최소공배수(lcm)를 구할 수도 있다. 대신에 더 간편한 STL을 이용해 최소공배수를 구했다. 반복문을 이용해 N개의 최소공배수를 구할 수 있다. 코드 #include #include #include using namespace std; int solution(vector arr) { int answer(1), id..

문제 https://www.acmicpc.net/problem/8980 8980번: 택배 입력의 첫 줄은 마을 수 N과 트럭의 용량 C가 빈칸을 사이에 두고 주어진다. N은 2이상 2,000이하 정수이고, C는 1이상 10,000이하 정수이다. 다음 줄에, 보내는 박스 정보의 개수 M이 주어진다. M은 1이 www.acmicpc.net 문제풀이 다 풀고 다른 분들의 풀이를 봤는데 간단하게 풀으셨다... 이런 풀이도 있다 참고만 하시는 걸로... 마을 1부터 마을 N까지 탐색하면서 마을에 도착하면 내릴 수 있는 박스 다 내리고, 박스를 싣는다. 박스를 실을 때는 최대 용량보다 적게 싣는다. 만약 용량을 넘어서면 이전에 실은 박스 중에서 도착 마을이, 이번에 실을 박스의 도착지 보다 먼 마을이 있으면, 박스..

문제 https://acmicpc.net/problem/2812 2812번: 크게 만들기 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제풀이 우선순위큐로도 풀 수 있는 거 같은데 스택이 코드가 더 간단해 보여서 스택으로 풀었다. 이 문제는 뒤로 가면서 큰 숫자를 발견하면 이전 숫자를 지우기만 하면 된다. 스택을 이용해 숫자를 push 하고, 큰 수가 나온다면, 스택이 비거나 스택의 top과 같을 때까지 pop을 하면 된다. 또는 지운 개수가 K개까지만 반복하면 된다. 입력받은 문자열을 모두 탐색했으면, K개를 안 지운 경우도 있을 수 있으니, while문을 이용해 추가로 지워준다. 스택에는 똑바로 쌓여있지..
문제 https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 문제풀이 괄호의 개수는 주어지지 않고 특별한 조건이 없는 걸로 봐선 무한으로 쓸 수 있다. 값을 최소로 만들려면 뺄셈을 최대한 많이 하는 것이 좋다. 그리고 코드를 줄이기 위해 입력을 받고 마지막에 '+' or '-'를 추가로 더한다. 처음 문자와 마지막 문자는 숫자이므로 첫 숫자는 무조건 덧셈을 해야 한다. '-' 나오는 경우에 뒤에 '+'가 오면 앞의 '-'를 기준으로 묶어 둘 다 ..

문제 https://www.acmicpc.net/problem/20300 20300번: 서강근육맨 PT 첫째 날에 $1$과 $4$를 선택하고, 둘째 날에 $2$와 $3$을 선택하고, 마지막 날에 $5$를 선택하면 $M$은 $5$가 되며, 이때가 $M$이 최소일 때이다. www.acmicpc.net 문제풀이 몇 가지 경우만 생각해서 최댓값을 구하면 되나 싶었는데, 경우가 많은 거 같아서 다 탐색했다. 운동기구가 짝수면 정렬을 하고 맨 앞, 맨뒤 두 개를 선택하고 맨 앞은 그다음 맨 앞, 맨뒤는 그다음 맨뒤를 선택해 가면 된다. 운동기구가 홀수인 경우는 운동기구 하나는 반드시 남게 된다. 정렬을 하여 가장 무거운 운동기구를 하나 남기면 나머지는 짝수개가 된다. 짝수개와 마찬가지로 양쪽 끝 두 개를 선택해 가..