목록전체 (195)
코딩하기 좋은날
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..
https://www.acmicpc.net/submit/2751 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 O(N^2)의 시간으로는 해결 할 수 없습니다. 따라서 시간복잡도가 O(NlogN)인 merge sort나 heap sort를 이용하면 되는데 저는 merge_sort를 구현해서 풀어보았습니다. 조만간 sort들도 모두 정리를 한번 해야할 것 같습니다.. merge_sort는 기본적으로 두 배열을 합치는 merge 함수와 분할 하고 다시 합치는 merge_sort 함수로 이루어져 있습니다. #include int arr[1000000]; //두 배열의 합병 void merge(int list[], int left, int mid, int right) { int i, j, k, ..
https://www.acmicpc.net/problem/1427 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 수를 입력받고 자릿수 대로 내림차순 정렬하는 문제입니다. 수를 입력받고 % / 연산자를 이용해서 자릿수 마다 숫자를 저장하고 sort를 이용하여 풀었습니다. 코드입니다. #include #include using namespace std; int main(void) { int N; cin >> N; int arr[10]; int i = 0; while(N) { arr[i++] = N % 10; N = N / 10; } sort(arr, arr+i, greater()); for(int j = 0; j < i; j++) cout
https://www.acmicpc.net/problem/10986 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 연속된 수들의 합중 M으로 나누어 떨어지는 수의 개수를 구하는 문제인데 시간 제한이 1초라서 O(N^2)의 복잡도로는 해결이 불가능하다. 따라서 입력받은 숫자들을 첫 번째부터 더하면서 나눈 나머지를 배열에 저장한 뒤 예를 들어 예제 입력인 1 2 3 1 2 라면 각각 3으로 나눈 1 0 0 1 0 이 된다. 이때 1과 1사이에 있는 연속 적인 수들의 합이 나누어 떨어지게 된다는 것을 알 수 있다. 즉 나머지가 동일한 숫자 들이 있으면 그중 어떤 2개를 뽑으면 그사이에서 나머지가 0인 것이 반드시 존재하게 된다. 따라서 존재 하는 나머지 들을 2개를 택하는 조합으로 생각해서 ..
https://www.acmicpc.net/problem/11441 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 숫자 들을 입력받고 입력받은 범위 까지의 합을 출력하는 문제입니다. 배열의 n번째 인덱스에 처음부터 n번째 까지의 합을 저장 하고 i부터 j까지의 범위가 주어지면 j번째 값에서 i-1번째 값을 빼 주면 범위의 합을 구할 수 있습니다. 코드입니다. #include #include using namespace std; int main(void) { int N,M; scanf("%d", &N); int arr[N]; int i,j; for(int i = 0; i < N; i++) { //배열에 처음부터 i번째 인덱스까지 의 합들을 저장한다. int x; scanf("%d",&x)..
https://www.acmicpc.net/problem/3052 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 10 개의 수를 입력받아 42로 나눈 나머지중 서로 다른 수의 개수를 출력하는 문제입니다. 서로 다른 수의 개수를 찾아야 하므로 입력 받은 수를 42로 나눈 수를 set에다가 저장 했습니다. 저장이 끝나면 set의 size를 출력하면 되는 간단한 문제입니다. #include #include using namespace std; int main(void) { set s; for(int i = 0; i >x; y = x % 42; s.insert(y); } cout
https://www.acmicpc.net/problem/2953 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 각 참가자들의 점수를 배열의 참가자 인덱스에 더해주면서 다 더하고 나면 max값과 비교하고 max값 변경시 인덱스와 max 값을 저장한 뒤 마지막에 max값과 인덱스 값을 출력하면 됩니다. 아주 간단한 문제입니다. 코드입니다. #include using namespace std; int main(void) { int total[5]; //참가자들의 점수 합을 저장 int num; // 입력받을 점수 int max = 0; //max값 int idx; //idx 값 for(int i = 0; i nu..
https://www.acmicpc.net/problem/9322 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 1 공개키 2공개키 암호문 해독문 4개의 스트링을 각각 선언해서 2공개키의 값과 1공개키의 값이 같은 지점을 찾아 인덱스가 어디에서 어디로 옮겨졌는지에 따라 암호문의 값을 해독문의 값으로 옮겼습니다. 스트링을 2차원 배열로 했으면 더 짧게 가능 했을것 같습니다. #include #include using namespace std; int main(void) { int T,N; // T는 테스트 케이스 N은 한문장의 단어 수 cin >> T; while(T) { cin >>N; string str1[N]; //제1 공개키 저장 string str2[N]; //제 2 공개키 저장..