https://www.acmicpc.net/problem/1427 1427번: 소트인사이드 첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 사고과정 1.) 1. 해당 입력을 int형으로 받을 것인지, string으로 받을 것인지 고민. 2. 첫번 째 풀이는 int형으로 해봄. 3. 우선 해당 정수의 자릿수가 필요하고, 4. 배열에 수들을 하나씩 넣어주고 5. 내림차순 sort 함수 사용. 2-1). 두 번째 string형으로 해봄. 2-2). 마찬가지로 바로 sort함수 사용하면됨. 메모리 크기는 비슷하다. #include #include using namespace std; bool Decend(int x, int y..
https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net sort 정렬을 활용하면 된다. 여기서 sort에 주는 함수 인자를 길이를 비교하는 것을 추가해주면 된다. #include #include #include using namespace std; bool comp(string s1, string s2) { if (s1.length() == s2.length()) return s1 < s2; else return s1.length() < s..
https://www.acmicpc.net/problem/1037 1037번: 약수 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되 www.acmicpc.net 해당 값들을 배열로 받아서, 가장 큰 값과 가장 작은 값을 곱하면 된다. #include #include using namespace std; int main() { int N = 0; cin >> N; int* arr = new int[N]; for (int i = 0; i > arr[i]; int small = *min_element(arr, arr + N);..
https://www.acmicpc.net/problem/1059 1059번: 좋은 구간 [9, 10], [9, 11], [9, 12], [10, 11], [10, 12] www.acmicpc.net 사고과정) 1. 우선 입력받은 값들을 오름차순으로 정렬한다 2. 입력받은 값(target)을 기점으로 바로 왼쪽값을 small, 바로 오른쪽값을 big이라 하고 이를 반복문으로 하나씩 접근하면서 할당. 3. 예제 2번의 경우 target = 10 이므로 small = 8, big = 13이 나온다. 하지만 해당 배열 안의 값은 들어가면 안되므로 small++, big--을 해준다. 그러면 small = 9, big = 12이다. 해당 경우들은 (9,10) (9,11) (9,12) (10, 11) (10, 1..
https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net 고3때 배운 조합 개념이 나온다. nCr을 그냥 코드로 잘 구현하면 된다. 처음엔 nCr이 n! / ( (n-r)! * r! ) 이니까 이걸 그대로 다 구현해서 하니, 메모리 범위를 너무 넘어섬. unsigned long long으로 해도 마찬가지. 그래서 좀 줄여서 생각해본게 n! / n-r! * 1/r!인데.. 아래 코드가 저렇지만 우선 돌려보면 그래도 이 n!하는게 값이 너무 커서 범위 초과..
https://www.acmicpc.net/problem/1292 1292번: 쉽게 푸는 문제 첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다. www.acmicpc.net 과정은 심플해보인다. 1. 해당 수열 만들기 -> 2. 받은 숫자째 합들 더하기. 수열을 어떻게 만들까가 문제인데.. 처음에는 N이 1000까지이므로, 정적 배열(int arr[1000])로 시도해봤다. 하지만 반복문 두개를 활용해서 인덱스 맞추기가 생각보다 까다로워서, 다른 방법을 고민하던 중 vector push_back을 떠올렸다. #include #include using namespace std; int mai..
https://www.acmicpc.net/problem/1094 1094번: 막대기 지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대 www.acmicpc.net 문제가 말을 정말 어렵게 써놨는데... 쉽게 생각해보면 1. 막대 길이가 입력값 X보다 크면 2로 나눈다. 2. 만약 막대 길이가 입력값 x보다 작으면, 합에 더해지니까 입력값X에서 막대길이를 빼준다. 이땐 나눠준 것이니 횟수를 하나 증가시킨다. 3.이걸 반복하면, 결국에 x가 0이 되고 종료. 역시 알고리즘 풀 땐 샤프 들고 써봐야한다.. #include using namespace std;..