2750번: 수 정렬하기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(){

    int N;
    int temp;
    int arr[1000];

    scanf("%d", &N);

    for(int i = 0; i < N; i++){
        scanf("%d", &arr[i]);
    }

    for(int i = 0; i < N - 1; i++){
        for(int j = 0; j < N - i - 1; j++){
            if(arr[j + 1] < arr[j]){
                temp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = temp;
            }
        }
    }

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

    return 0;
}

2164번: 카드2

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

#define size 500000

int main(){

    int N;
    int front, rear;
    int queue[size];

    scanf("%d", &N);

    front = 0;
    rear = N - 1;

    for(int i = 0; i < N; i++){
        queue[i] = i + 1;
    }
    while(1) {
        front = (front + 1) % N;

        if(rear == front){
            break;
        }

        rear = (rear + 1) % N;
        queue[rear] = queue[front];
        front = (front + 1) % N;

        if(rear == front){
            break;
        }
    }
    
    printf("%d", queue[rear]);

    return 0;
}

10814번: 나이순 정렬

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

struct user{
    int age;
    char name[101];
};

int main(){
    int N;
    struct user usr[100000];
    scanf("%d", &N);

    for(int i = 0; i < N; i++){
        scanf("%d %s", &usr[i].age, usr[i].name);
    }
    for(int i = 0; i <= 200; i++){
        for(int j = 0; j < N; j++){
            if(usr[j].age == i){
                printf("%d %s\\n", usr[j].age, usr[j].name);
            }
        }
    }

    return 0;
}

1158번: 요세푸스 문제

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(){
    int N, K;
    int arr[5001] = { 0 };
    int temp;
    scanf("%d %d", &N, &K);

    printf("<%d", K);

    arr[K] = 1;

    temp = K;

    for(int i = 0; i < N - 1; i++){
        for(int j = 0; j < K; j++){
            while(1){
                temp++;
                
                if(temp > N){
                    temp = 1;
                }

                if(!arr[temp]){
                    break;
                }
            }
            printf(", %d", temp);
            arr[temp] = 1;
        }
    }
    printf(">");

    return 0;
}

2805번: 나무 자르기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int arr[1100000];

int BinarySearch(long long L, long long R, int N, int M){

    long long tree = 0;
    long long mid = (L + R) / 2;

    for(int i = 0; i < N; i++){
        if(arr[i] > mid){
            tree += (arr[i] - mid);
        }
    }

    if(tree >= M){
        tree = 0;

        for(int i = 0; i < N; i++){
            if(arr[i] > (mid + 1)){
                tree += (arr[i] - (mid + 1));
            }
        }

        if(tree < M){
            return mid;
        }

        else{
            return BinarySearch(mid + 1, R, N, M);
        }
    }

    else{
        return BinarySearch(L, mid - 1, N, M);
    }
}

int main(){
    int N, M;
    int max;

    max = 0;

    scanf("%d %d", &N, &M);

    for(int i = 0; i < N; i++){
        scanf("%d", &arr[i]);
        max = max > arr[i] ? max : arr[i];
    }

    long long L = 1;
    long long R = max;

    printf("%d", BinarySearch(L, R, N, M));

    return 0;
}

1967번: 트리의 지름

import sys
input = sys.stdin.readline
sys.setrecursionlimit(100000)

N = int(input())

Tree = [[] for _ in range(N + 1)]

visited = [-1] * (N + 1)
visited[1] = 0

for i in range(N - 1):
    P, C, W = map(int, input().split())
    Tree[P].append((C, W))
    Tree[C].append((P, W))

def DFS(N, C):
    for i, j in Tree[N]:
        W = C + j
        if(visited[i] == -1):
            visited[i] = W
            DFS(i, W)
    return

DFS(1, 0)
temp = 0
num = 0

for i in range(1, len(visited)):
    if(visited[i] > temp):
        temp = visited[i]
        num = i

visited = [-1] * (N + 1) 
visited[num] = 0
DFS(num, 0)

print(max(visited))

1939번: 중량제한

import sys
from collections import deque
input = sys.stdin.readline
N, M = map(int,input().split())
graph = [[] for _ in range(N+1)]

start = 1
end = 0
res = 0

def BFS(weight):  
    queue = deque()
    queue.append(s) 
    visited = [0 for _ in range(N+1)]
    visited[s] = 0
    while(queue):
        num = queue.popleft()
        for i,j in graph[num]:
            if(visited[i] == 0 and j >= weight):
                queue.append(i)
                visited[i] = 1
    if(visited[e] != 0): 
        return True  
    return False 

for _ in range(M): 
    A, B, C = map(int,input().split())
    end = max(end, C) 
    graph[A].append([B, C])
    graph[B].append([A, C])

s, e = map(int,input().split())  

while(start <= end):
    mid = (start+end)//2
    if BFS(mid): 
        res = mid
        start = mid + 1
    else:
        end = mid - 1

print(res)

1949번: 우수 마을