목록백준(Baekjoon) 문제 (142)
코딩하기 좋은날
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..
https://www.acmicpc.net/problem/1032 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 문자열들을 입력받아서 i번째에 있는 문자가 문자열들 중 하나라도 다르면 ?를 넣어주면 됩니다. 모두 같으면 그 문자를 넣고 출력 하면 되는 간단한 문제였습니다. 코드입니다. #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(false); cin.tie(NULL); int N; cin >> N; char arr[N][51]; //입력 받을 문자 배열 char result[51] ={0,}; //결과를 저장할 배열 for(int i = 0; i > arr[i..