반응형 전체 글90 [C] 단일연결리스트 합병정렬 (singly linked list merge sort) 합병정렬에 관한 포스팅은 따로 알고리즘 창고에 하겠습니다. 보통 배열로 이루어진 정렬만 해서 애를 먹었습니다. 특히 분할하는 부분에서 힘들었는데, 그래도 깔끔한 방법을 찾아내 만들었습니다. 구조체 및 함수설명 NODE : 단일연결리스트를 구성하는 노드 구조체 TMP : partition 함수를 위한 구조체. 두 개의 반환값을 받아내기 위함 NODE* addNode(int n) : 노드를 추가하는 함수. 단일연결리스트 끝부분에 계속 붙여나가므로 새 노드 값의 next는 항상 NULL이다. void mergeSort(NODE **L, int k) : 합병정렬함수. 재귀방식으로 구성돼있다. L은 리스트의 시작 주소, k는 리스트의 크기이다. NODE* merge(NODE *L1, NODE *L2) : 합병함수.. 2018. 10. 14. [C] 백준 13458번: 시험 감독 되게 오랜만에 백준을 풀고 쓰는 글이다. 방학의 휴식과 개인적인 일을 하다보니 공부가 소홀해졌다. 앞으로는 하루에 하나씩이라도 풀어나가야겠다. 시험 감독의 핵심은 연산 중에 총감독관의 할당량을 계산하고 음수가 되는 상황을 처리하는 것이다. 이것을 찾지 못하면 능구렁이에 빠진 것 마냥 문제를 해결하지 못할 수도 있다. 내가 그랬다. 그래서 인지 정답 비율도 낮다. 한 열흘간 굳어버린 나의 뇌를 깨우는데 좋은 문제였다. 입출력 예시 정답 코드 #include int main() { long long N; long long *A; long long B, C;// 총감독, 부감독 long long B_count = 0, C_count = 0; scanf("%lld", &N); A = new long long[N.. 2018. 8. 12. [C] 백준 1205번: 등수 구하기 내가 푼 문제 중 가장 정답률이 낮은 문제다. 문제의 요점은 같은 점수 끼리에서 송유진의 점수는 그 점수들 중 가장 낮은 점수로 취급 된다는 거다. 예를 들자면 랭킹 리스트가 3개 까지만 들어갈 수 있고, 기존 점수 3개가 100 100 100이라면 송유진의 점수가 100점이어도 랭킹 진입을 할 수 없다. 이 점이 정답률이 낮은 원인인 것 같다. 내가 이런 알고리즘을 풀 때 요점으로 보는 것은 주어진 조건 내에서 얼마나 편하고 싸게 먹히는 방법으로 푸느냐이다. 굳이 거창한 방법으로 풀 필요없다고 생각한다. 어쨋든 결과물은 같은 거로 나오니까. 입출력 예시 입력 출력 3 100 3100 100 100 -1 입력 출력 3 90 10100 90 902 정답 코드 #include int main() { int .. 2018. 7. 31. [레인보우식스] 처음이니까 스타터팩을 사야할까? DLC 총 정리 레인보우 식스 시즈를 시작하려는 사람들 중 열에 둘 셋 정도는 저지르는 실수가 있다. 스타터팩으로 사는 것! 스타터팩은 유비소프트에서도 사지 않는 것을 추천하는 끔찍한 흑우 생성기이다. 근데 왜 안 없애고 있지? 나같이 아무것도 모르고 덤비다가 스타터팩 사고, 샀다가 재밌는데 오퍼는 몇 없어서 돈만 더 써가지고 컴플리트 팩을 사게 되는 것이다. 이런 레린이의 비극을 막기 위해 DLC 팩을 정리해보겠다. 스타터 팩 (기본 오퍼 6명) 18500원 나는 정말 레인보우 식스를 하면서 자수성가라는 것을 이루고싶다! 라고 생각하면 사는 것을 추천한다. 오퍼레이터는 기본 20명의 오퍼레이터가 명성 12500, 그 다음에 나온 오퍼레이터들은 25000 명성을 주고 해제할 수 있다. 그런데 한 판에 많아야 500 명성.. 2018. 7. 31. [C] 백준 9012번: 괄호 문제 조건은 참 간단하다. 괄호 짝이 알맞게 지어져 있는지를 판별하는 것이다. 여는 괄호가 계속 누적 됐다가 나올 수도 있고 열렸다가 닫혔다가 반복할 수 있기 때문에 스택을 이용해 푸는 것이 가장 편하게 먹힌다고 생각한다. 시간이 나면 한 번 스택이 아닌 다른 방법으로도 풀어봐야겠다. 입출력 예시 정답 코드 #include char stack[50]; int top = 0; int isVPS(char *); void push(char); char pop(); int isEmpty(); int main() { int t; char str[51]; int i; scanf("%d", &t); for (i = 0; i < t; i++) { scanf("%s", str); if (isVPS(str)) printf.. 2018. 7. 29. [C] 백준 2869번: 달팽이는 올라가고 싶다 수학적 지식이 필요한 문제이다. 이분 탐색법으로도 풀 수 있지만 항상 더 짧고 간단하게 끝내는 것이 좋지 않은가? 그래서 한 줄 짜리 수식 하나로 끝냈다. 시간 제한을 보면 알 수 있듯이 상수시간, O(1) 내로 풀어야한다. 그래서 선택할 수 있는 방법이 한 줄 수식과 이분 탐색 밖에 없는 것이다. 아마 반복문을 쓰면 백퍼센트 시간 초과가 뜰 것이다. 입출력 예시 입력 출력 2 1 5 4 입력 출력 10 3 548 정답 코드 #include int main() { int A, B, V; int day; scanf("%d %d %d", &A, &B, &V); day = (V - B - 1) / (A - B) + 1; printf("%d", day); return 0; } 코드 설명 1. A, B, V를 입.. 2018. 7. 25. 이전 1 ··· 8 9 10 11 12 13 14 15 다음 반응형