37번 문제   

 

 

 



    내가 풀이한 답   

 앞에서 

#include <stdio.h>
#include <stdlib.h>

int main() {
	//freopen("input.txt", "rt", stdin);
	int n, m, i, a, j, idx, flag = -1;
	scanf("%d %d", &n, &m);
	
	int *arr = (int *)malloc(sizeof(int) * n);
	
	for(i=0; i<m; i++){
		scanf("%d", &a);
		flag = -1;
		for(j=0; j<n; j++){
			if(arr[j] == a) {
				idx = j;
				flag = 1;
			}
		}
		
		if(flag == 1){
			for(j=idx-1; j>=0; j--){
				arr[j+1] = arr[j];
			}
		}
		else {
			for(j=n-2; j>=0; j--){
				 arr[j+1] = arr[j];
			}
		}
		arr[0] = a;
	}
	
	for(i=0; i<n; i++){
		printf("%d ", arr[i]);
	}
    
    	free(arr);
	return 0;
}

 

 결과는 통과하였다.

 

 



    사이트의 답안   

#include <stdio.h>
int C[20];
int main() {
	freopen("input.txt", "rt", stdin);
	int s, n, a, i, j, pos;
	scanf("%d %d", &s, &n);
	for(i=1; i<=n; i++){
		scanf("%d", &a);
		pos=-1; 
		for(j=0; j<s; j++) if(C[j]==a) pos=j;
		if(pos==-1){
			for(j=s-1; j>=1; j--) C[j]=C[j-1];
		}
		else{
			for(j=pos; j>=1; j--) C[j]=C[j-1];
		}
		C[j]=a;
	}
	for(i=0; i<s; i++) printf("%d ", C[i]);
	return 0;
}

 

 

 

'알고리즘 & 자료구조 > 정렬' 카테고리의 다른 글

36. 삽입정렬  (0) 2020.09.11
35. Special Sort(구글 인터뷰)  (0) 2020.09.11
34. 버블정렬  (0) 2020.09.11
33. 3등의 성적은?  (0) 2020.09.11
32. 선택정렬  (0) 2020.09.11

    36번 문제   

 

 



    내가 풀이한 답   

 앞에서 

#include <stdio.h>
#include <stdlib.h>

int main() {
	freopen("input.txt", "rt", stdin);
	
	int n, i, j, key, temp;
	scanf("%d", &n);
	
	int *arr = (int *)malloc(sizeof(int) * n);
	
	for(i=0; i<n; i++){
		scanf("%d", &arr[i]);
	}
	
	for(i=1; i<n; i++){
		key = i;
		for(j=i-1; j>=0; j--){
			if(arr[key] < arr[j]){
				temp = arr[key];
				arr[key] = arr[j];
				arr[j] = temp;
				key--;
			}
		}
	}
	
	for(i=0; i<n; i++){
		printf("%d ", arr[i]);
	}
	
	free(arr);
	return 0;
}

 

 결과는 통과하였다.

 

 



    사이트의 답안   

#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
	freopen("input.txt", "rt", stdin);
	int a[100], n, tmp, i, j;
	scanf("%d", &n);
	for(i=0; i<n; i++){
		scanf("%d", &a[i]);
	}
	for(i=1; i<n; i++){
		tmp=a[i];
		for(j=i-1; j>=0; j--){
			if(a[j]>tmp) a[j+1]=a[j];
			else break;
		}
		a[j+1]=tmp;
	}
	for(i=0; i<n; i++){
		printf("%d ", a[i]);
	}	
	return 0;
}

 

'알고리즘 & 자료구조 > 정렬' 카테고리의 다른 글

37. Least Recently Used(카카오 캐시 문제 변형)  (0) 2020.09.12
35. Special Sort(구글 인터뷰)  (0) 2020.09.11
34. 버블정렬  (0) 2020.09.11
33. 3등의 성적은?  (0) 2020.09.11
32. 선택정렬  (0) 2020.09.11

    35번 문제   

 

 



    내가 풀이한 답   

 앞에서 

#include <stdio.h>
#include <stdlib.h>

int main() {
	//freopen("input.txt", "rt", stdin);
	
	int n, i, j, temp, idx, con = 0;
	scanf("%d", &n);
	int *arr = (int *)malloc(sizeof(int) * n);
	
	for(i=0; i<n; i++){
		scanf("%d", &arr[i]);
	}
	
	for(i=0; i<n; i++){
		if(arr[i] < 0){
			idx = i;
			for(j=i-1; j>=con; j--){
				temp = arr[j];
				arr[j] = arr[idx];
				arr[idx] = temp;
				idx--;
			}
			con++;
		}
	}
	
	for(i=0; i<n; i++){
		printf("%d ", arr[i]);
	}
	
    free(arr);
	return 0;
}

 

 결과는 통과하였다.

 

 



    사이트의 답안   

#include<stdio.h>
int main() {
	freopen("input.txt", "rt", stdin);
	int a[101], n, tmp, min, i, j;
	scanf("%d", &n);
	for(i=0; i<n; i++){
		scanf("%d", &a[i]);
	}
	for(i=0; i<n-1; i++){
		for(j=0; j<n-i-1; j++){
			if(a[j]>0 && a[j+1]<0){
				tmp=a[j];
				a[j]=a[j+1];
				a[j+1]=tmp;
			}
		}
	}
	for(i=0; i<n; i++){
		printf("%d ", a[i]);
	}
	return 0;
}



 

 

'알고리즘 & 자료구조 > 정렬' 카테고리의 다른 글

37. Least Recently Used(카카오 캐시 문제 변형)  (0) 2020.09.12
36. 삽입정렬  (0) 2020.09.11
34. 버블정렬  (0) 2020.09.11
33. 3등의 성적은?  (0) 2020.09.11
32. 선택정렬  (0) 2020.09.11

    34번 문제   

 

 



    내가 풀이한 답   

 앞에서 풀었던 선택정렬을 바탕으로 오름차순으로 정렬을 한 다음 뒤에서 부터 순회(for)를 통해 각각의 요소를 접근하면서 동점자를 제외하고 점수가 다르면 count 변수를 증가시켜 count 변수가 3이 되는 시점의 index의 해당 요소를 출력하였다.

#include <stdio.h>
#include <stdlib.h>

int main() {
	freopen("input.txt", "rt", stdin);
	int n, i, j, temp;
	scanf("%d", &n);
	
	int *arr = (int *)malloc(sizeof(int) * n);
	
	for(i=0; i<n; i++){
		scanf("%d", &arr[i]);
	}
	
	for(i=n-1; i>0; i--){
		for(j=0; j<i; j++){
			if(arr[j] > arr[j+1]){
				temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}

	for(i=0; i<n; i++){
		printf("%d ", arr[i]);
	}

	free(arr);
	return 0;
}

 

 결과는 통과하였다.

 

 



    사이트의 답안   

#include<stdio.h>
int main() {
	freopen("input.txt", "rt", stdin);
	int a[101], n, tmp, idx, i, j, cnt=0;
	scanf("%d", &n);
	for(i=0; i<n; i++){
		scanf("%d", &a[i]);
	}
	for(i=0; i<n-1; i++){
		idx=i;
		for(j=i+1; j<n; j++){
			if(a[j]>a[idx]) idx=j;
		}
		tmp=a[i];
		a[i]=a[idx];
		a[idx]=tmp;
	}
	for(i=1; i<n; i++){
		if(a[i-1]!=a[i]) cnt++;
		if(cnt==2){
			printf("%d\n", a[i]);
			break;
		}
	}
	return 0;
}

 

  사이트의 답은 선택정렬을 이용해 내림차순으로 정렬한 다음 처음 숫자가 아닌 다음 숫자부터 같은 숫자가 아니면 count 변수를 증가시켜 count 변수가 2인 index의 요소를 출력하였다.

 

 

'알고리즘 & 자료구조 > 정렬' 카테고리의 다른 글

37. Least Recently Used(카카오 캐시 문제 변형)  (0) 2020.09.12
36. 삽입정렬  (0) 2020.09.11
35. Special Sort(구글 인터뷰)  (0) 2020.09.11
33. 3등의 성적은?  (0) 2020.09.11
32. 선택정렬  (0) 2020.09.11

    33번 문제   

 

 



    내가 풀이한 답   

 앞에서 풀었던 선택정렬을 바탕으로 오름차순으로 정렬을 한 다음 뒤에서 부터 순회(for)를 통해 각각의 요소를 접근하면서 동점자를 제외하고 점수가 다르면 count 변수를 증가시켜 count 변수가 3이 되는 시점의 index의 해당 요소를 출력하였다.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
	//freopen("input.txt", "rt", stdin);

	int n, i, j, temp, idx, cnt = 0;
	scanf("%d", &n);
	int *arr = (int *)malloc(sizeof(int) * n);
	
	for(i=0; i<n; i++){
		scanf("%d", &arr[i]);
	}
	
	for(i=0; i<n-1; i++){
		idx = i;
		for(j=i+1; j<n; j++){
			if(arr[idx] > arr[j]){
				idx = j;
			}
		}
		temp = arr[i];
		arr[i] = arr[idx];
		arr[idx] = temp;
	}
	
	
	for(i=n-1; i>=0; i--){
		if(arr[i] != arr[i-1]) cnt++;
		if(cnt==3) {
			idx = i;
			break;	
		}
	}
	printf("%d", arr[idx]);
    	free(arr);
	return 0;
}

 

 결과는 통과하였다.

 

 



    사이트의 답안   

#include<stdio.h>
int main() {
	freopen("input.txt", "rt", stdin);
	int a[101], n, tmp, idx, i, j, cnt=0;
	scanf("%d", &n);
	for(i=0; i<n; i++){
		scanf("%d", &a[i]);
	}
	for(i=0; i<n-1; i++){
		idx=i;
		for(j=i+1; j<n; j++){
			if(a[j]>a[idx]) idx=j;
		}
		tmp=a[i];
		a[i]=a[idx];
		a[idx]=tmp;
	}
	for(i=1; i<n; i++){
		if(a[i-1]!=a[i]) cnt++;
		if(cnt==2){
			printf("%d\n", a[i]);
			break;
		}
	}
	return 0;
}

 

  사이트의 답은 선택정렬을 이용해 내림차순으로 정렬한 다음 처음 숫자가 아닌 다음 숫자부터 같은 숫자가 아니면 count 변수를 증가시켜 count 변수가 2인 index의 요소를 출력하였다.

 

 

'알고리즘 & 자료구조 > 정렬' 카테고리의 다른 글

37. Least Recently Used(카카오 캐시 문제 변형)  (0) 2020.09.12
36. 삽입정렬  (0) 2020.09.11
35. Special Sort(구글 인터뷰)  (0) 2020.09.11
34. 버블정렬  (0) 2020.09.11
32. 선택정렬  (0) 2020.09.11

    32번 문제   

 

 



    내가 풀이한 답   

 

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
	freopen("input.txt", "rt", stdin);

	int n, i, j, min, idx, temp;
	scanf("%d", &n);
	int *arr = (int *)malloc(sizeof(int) * n);
	
	for(i=0; i<n; i++){
		scanf("%d", &arr[i]);
	}
	
	for(i=0; i<n-1; i++){
		min = arr[i];
		idx = i;
		for(j=i+1; j<n; j++){
			if(min > arr[j]){
				min = arr[j];
				idx = j;
			}
		}
		temp = arr[i];
		arr[i] = min;
		arr[idx] = temp;
	}
	
	for(i=0; i<n; i++){
		printf("%d ", arr[i]);
	}

	free(arr);
	return 0;
}

 

 결과는 통과하였다.

 

 



    사이트의 답안   

#include<stdio.h>
int main() {
	freopen("input.txt", "rt", stdin);
	int a[101], n, tmp, idx, i, j;
	scanf("%d", &n);
	for(i=0; i<n; i++){
		scanf("%d", &a[i]);
	}
	for(i=0; i<n-1; i++){
		idx=i;
		for(j=i+1; j<n; j++){
			if(a[j]<a[idx]) idx=j;
		}
		tmp=a[i];
		a[i]=a[idx];
		a[idx]=tmp;
	}
	for(i=0; i<n; i++){
		printf("%d ", a[i]);
	}
	return 0;
}

 

  사이트의 답과 비슷하지만 내 코드에서 굳이 min 값을 따로 설정해 둘 필요가 없었단 걸 깨달았다...

 

 


 

    정리   

 

 위의 입력 예시를 그림으로 정리해보았다. 

 

'알고리즘 & 자료구조 > 정렬' 카테고리의 다른 글

37. Least Recently Used(카카오 캐시 문제 변형)  (0) 2020.09.12
36. 삽입정렬  (0) 2020.09.11
35. Special Sort(구글 인터뷰)  (0) 2020.09.11
34. 버블정렬  (0) 2020.09.11
33. 3등의 성적은?  (0) 2020.09.11