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번: 우수 마을