프로그래밍/알고리즘

3. do it! 02-2 기본 자료구조 (정렬, 소수) -c언어

량아이 2022. 7. 26. 20:05

앟 책에서 배열요소를 역순으로 정렬이라고 하길래 내림차순으로 재정렬하는줄 알았는데 a[0] <-> a[4], a[1] <-> a[3], a[2] 말 그대로 배열의 순서만 바꾸는 거였다! ㅋㅋㅋ

 

for(i=0;i<n/2;i++){
	t = a[i];
    a[i] = a[n - i - 1]; 
    //a[n]개의 배열중에 a[n - i - 1]을 해줌으로서 i의 바로 반대편에 위치한 인덱스 값과 교환
    a[n - i - 1] = t;
}

이후 기수(기본 수) n진수로 변환도 있었으나 아직은 그렇게 필요성을 못느껴서 그냥 넘어갔다!

 

소수구하기

이제까지는 소수구하기를 

#include <stdio.h>

int main(){
    int cnt,j;
    for(int i=2; i<1000;i++){
        cnt=0;
        for(j=2;j<i;j++){
            if(i%j==0){
                cnt++;
                break;
            }
        }
        if(cnt=0) //나눠졌던 수가 없을 시
            printf("%d\n",i);
    }
}

이렇게 했었으나 cnt를 쓰지 않더라도 그냥 j가 i 수만큼 갔을시로 조건 걸수도 있다!

if(j==i)  //마지막까지 나누어 떨어지지 않았을 시
   printf("%d\n",i);

이렇게!! 더 간단해졌다.

바깥쪽 for문의 i값을 2씩 증가하여 3,5,7,9... 홀수값만 생성해 시간을 더욱 줄일 수 있다

#include <stdio.h>

int main(){
    int j;
    for(int i=3; i<1000;i+=2){
        for(j=2;j<i/2;j++){
            if(i%j==0){
                break;
            }
        }
        if(j==i/2)
            printf("%d\n",i);
    }
}

내가 생각하는 극한의 시간 줄이기 하지만 백준 소수구하기 문제는 어림도 없이 시간 초과 실패 ㅋㅋ

 

구조체도 전에 공부했던 글이 있기에 블로그에 다시 따로 정리하지 않겠다.

 

아ㅋㅋㅋ이거 언제 푸냐고....ㅠㅠㅠ

시간 초과!