본문 바로가기

알고리즘219

[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.
[C++] 백준 15649번 : N과 M (2) 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. www.acmicpc.net 문제 풀이 순서와 관련된 문제이다. 방법 1. 만약 N = 5, N = 3일 경우 1 2 3 1 2 4 1 2 5 1 3 2 → 1 3 4 (1 3 2는 오름차순이 아니므로) 1 3 5 ··· 와 같이 진행된다. 순서대로 진행되고 결과 수열이 오름차순이어야 하므로 첫 번째 자리는 1부터 시작하고 두 번째 자리의 숫자는 무조건 첫 번째 자리 숫자보다 큰 수가 나와야 한다. 마지막 자리 또한 무조건 두 번째 자리 숫자보다 큰 수가 나와야 한다. 즉, 중복이.. 2020. 4. 17.