목록전체 (195)
코딩하기 좋은날
https://www.acmicpc.net/problem/10825 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 이름 국어 영어 수학 점수를 입력받은 뒤 주어진 조건 국어 점수가 감소하는 순서로 국어 점수가 같으면 영어 점수가 증가하는 순서로 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.) 으로 정렬을 해주어야 합니다. 우선 입력 받아야 할 값의 종류가 4가지 이므로 구조체를 정의해서 입력을 받았고, 그 구조체를 저러한 4가지 조건에 맞게 정렬 할 수 있도록 cmp 라는 함수를 만들어 정렬 조건을 정의 하였습니다. 그후 sort 함수에 조건을..
https://www.acmicpc.net/problem/1181 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 단어들을 입력받고 먼저 길이 순으로 정렬을 하고 같은 길이는 사전순으로 정렬을 해서 출력을 해야합니다. 저는 그래서 우선은 multimap에 길이와 문자열을 입력받아 길이 순으로 정렬을 하고 길이가 같은 문자열들을 set에 넣어준뒤 출력 하는 방법으로 풀었습니다. 다른 사람들 풀이를 보니 정렬 조건을 넣은 함수를 만들어서 간단하게 푼것을 보니 좀 허무했습니다 ㅠㅠ.. 제가푼 코드입니다. #include #include #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(false);..
https://www.acmicpc.net/problem/1026 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 두 배열을 입력받은 뒤 각 인덱스의 곱의 합이 최소가 되도록 만드는 문제입니다. 두 배열의 인덱스 값의 곱의 합이 최소가 되려면 한 배열은 내림차순, 한 배열은 오름차순 으로 정렬 한뒤 각 인덱스 끼리 곱해서 더해주면 됩니다. 다음은 코드입니다. #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(false); cin.tie(NULL); int N; cin >> N; int arr[N]; int brr[N]; int sum = 0; for(int i = 0; i < N; i++) c..
https://www.acmicpc.net/problem/4949 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 각각 대괄호'[]' 와 소괄호() 가 알맞게 짝지어 져있는지 확인 하는 문제였습니다. 따라서 '(' 이나 '[' 가 나오면 벡터에 push를 해주고 ')' 이나 ']' 가 나오는 순간 벡터의 back 부분에 그에 짝이 맞는 괄호가 있는지 확인 한 후 pop을 해주었습니다. 닫히는 괄호가 나오는 순간 그 이전에 열린괄호가 짝이 맞지 않다면 괄호가 균형잡히게 들어 있지 않은 것입니다. 저는 비어있는 조건 검사하기가 귀찮아서 초기에 'a'를 그냥 넣어주었습니다. 다음은 코드입니다. #include #include #include using namespace std; int main..
https://www.acmicpc.net/problem/9935 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 입력받는 문자열이 100만입니다. 시간 제한이 2초 이므로 폭발 문자열을 찾아가며 없애고 다시 문자열을 돌며 폭발 문자열을 찾는 방식으로 풀게 된다면 시간초과가 나올 것입니다. 따라서 저는 벡터 컨테이너에 문자를 하나씩 넣으며 폭발 문자열의 가장 마지막 문자가 나왔을 때 앞에 있는 원소들과 폭발 문자열의 일치 여부를 비교하여 일치하면 그부분을 pop시키고 다시 남은 문자열들을 넣어가며 폭발 문자열을 모두 제거하였습니다. 다음은 코드입니다. #include #include #include using namespace std; int main(void) { ios_base::sy..
https://www.acmicpc.net/problem/5525 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 입력 받은 문자열과 N,M을 통해 I와 N개의OI가 연속한 문자가 몇개 있는지 찾는 문제입니다. 입력이 백만까지 주어져있으므로 단순 비교로는 시간초과가 나올 것입니다. 따라서 저는 OI의 개수를 세어서 Pn을 만족하는 문자열이 나오면 개수를 하나 증가시키고 OI의 개수를 하나 줄인뒤 다시 뒤에 2개의 값을 비교해서 OI가 또 다시 나온다면 개수를 증가 시키는 방식으로 해결 하였습니다. 예를 들어 IOIOI가 몇개 있는지 찾아야 한다고 할때 주어진 문장이 IIOIOIOIOIII 이런식이라면 처음에 IOIOI를 발견 했을 때 개수를 하나 증가시키고 OI의 개수를 하나 감소 시키면..
https://www.acmicpc.net/problem/5598 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 각 대문자를 입력받으면 D->A E->B 와 같은식으로 -3씩을 해주어 변환을 해주면 됩니다. 주의할 점은 A,B,C의 경우 X, Y, Z로 변환이 되므로 이 세 경우엔 +23을 해주어야합니다. 다음은 코드입니다. #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(false); cin.tie(NULL); string str1; cin >> str1; for(auto n : str1) { if(n
https://www.acmicpc.net/problem/1764 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 듣과 보각각 문자열을 입력받고 둘다 해당하는 경우의 수와 문자열을 출력하는 문제입니다. 각각의 경우가 500000 까지 가능하므로 그냥 두 문자열을 비교하면 O(N^2)으로 시간 초과가 날 것입니다. 따라서 저는 multiset과 set을 이용해서 처음에 multiset에 문자열을 모두 입력받고 멀티셋의 카운트가 2인 문자열을 다시 셋에 집어넣었습니다. 코드입니다. #include #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(false); cin.tie(NULL); int N..