본문 바로가기

cpp10

[C++] 백준 14889번 : 스타트와 링크 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 문제 백준문제이미지 풀이 N은 짝수이므로 항상 두팀으로 나누는게 보장된다. 따라서, N / 2는 1로 나머지 N / 2는 0으로 만들어 1팀과 0팀으로 나누고 sort를 해준뒤 순열을 사용하면 된다. 문제점 첫번째 팀은 첫번째 팀과 두번째 팀은 두번째 팀끼리 더해야 함을 주의 코드 #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); co.. 2020. 5. 30.
[C++] 백준 14888번 : 연산자 끼워넣기 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, �� www.acmicpc.net 문제 백준문제이미지 풀이 연산자의 수는 입력받은 수보다 1개가 적다. 각각의 연산자에 숫자를 부여하고 부여한 숫자를 연산자의 수 만큼 배열에 차례대로 추가하여 순열을 사용하면 된다. 문제점 첫째 줄에 최댓값을, 둘째 줄에는 최솟값을 출력해야 하는데 반대로 출력해버린 실수를 저질렀다... minmax_element를 사용할 때 second에 최댓값, first에 최솟값임을 주의하자! 코드 #include .. 2020. 5. 30.
[C++] 백준 1339번 : 단어 수학 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 문제 백준문제이미지 풀이 최대값을 구하는 문제이므로 큰 숫자들만 넣어서 조사해보면 된다. 각 알파벳에 숫자를 매칭시키기 위해 unique와 erase를 사용해서 중복된 알파벳을 제거시켜야 한다. 문제점 unique를 쓰기전에 반드시 sort가 필요하다. 또한 erase를 사용할 때 매개변수를 잘 확인해서 사용하는것을 주의하자. 코드 #include #include #include #include using namespace std; char alpha[25.. 2020. 5. 30.
[C++] 백준 2529번 : 부등호 2529번: 부등호 여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력� www.acmicpc.net 문제 백준문제이미지 풀이 K는 0 ~ 9까지의 수 즉 10개이다. 부등호를 만족하는 가장 큰 수를 만들기 위해서는 0~9중 가장 큰 수를 순서대로 넣으면 되고 부등호를 만족하는 가장 작은 수를 만들기 위해서는 0~9중 가장 작은 수를 순서대로 넣으면 된다. 처음 큰 수와 작은 수를 저장한 배열에 큰 수는 9부터 작은 수는 0부터 들어가므로 가장 큰 수는 prev_permutation을 가장 작은 수는 next_permutation을 사용하여 입력한 부등호에 .. 2020. 5. 30.
[C++] 백준 15649번 : 다음 순열 10972번: 다음 순열 첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 문제 풀이 방법 1. 사전 순으로 나열하였을 때 다음 순열을 찾는 문제이다. 순열은 오름차순으로 이루어져 있고 가장 마지막 순열만 내림차순으로 이루어져 있다. 즉, 중복 X 만약 순열 A = 8457631 이 845로 시작하는 마지막 순열로 주어졌을 때 다음 순열을 찾는 방법은 1. 8 4 5 7 6 3 1 > > 위와 같이 뒤에서부터 시작해 A[i - 1] < A[i] 가 되는 i를 찾는다. 2. 다음 순열은 84?으로 시작하므로 이전인 ?는 5보다 크면서 7631중에 가장 작은 수(A[j])를 찾아 주어야 한다. 즉, .. 2020. 4. 17.
[C++] 백준 15649번 : N과 M (3) 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. www.acmicpc.net 문제 풀이 N과 M (1) 에서 중복을 허용한 문제이다. N과 M (1) 코드에서 check 배열을 통한 중복확인을 빼면 된다. 아래 링크의 풀이 참고 [C++] 백준 15649번 : N과 M (1) 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력.. comgong-man.tistory... 2020. 4. 17.