본문 바로가기

backjoon24

백준 1697 java https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 풀이 방법 풀이 코드 import java.io.*; import java.util.*; public class Main{ static int N; static int K; static int move[] = new int[100001]; public static void main(String [] args) throws IOException { BufferedReade.. 2024. 2. 5.
백준 14501 퇴사 c언어 https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 사고과정) 1. 이중 배열을 쓸지 구조체를 결정! 나는 구조체 결정! 2. dfs를 사용해서 경우의 수를 다 확인해준다 -> N의 숫자가 작기 떄문에 문제 없을 것이라 생각 3. 전역 변수로 result를 한것을 이용해 최고 pay를 판별해준다 개선점 or 실생활 활용점) 1. 전반적으로 깔끔하지 못하다 ex) i, j 와 result 를 전역변수로 활용했으면 더 좋았을 것이다. 2. 지하철 시간별로 급행열차를 타냐 안 타냐로 최소의 시간으로 목적지에 갈 수 있도록 활용가능할 것 같다. 나의코드) #include typedef str.. 2023. 3. 10.
백준 13458 시험감독 c언어 https://www.acmicpc.net/problem/13458 13458번: 시험 감독 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000) www.acmicpc.net 사고과정) 1. 총감독이 감시할수 있는 인원수 B를 각 시험장 인원에 빼준다 이떄 나온 값이 0보다 작거나 0일때는 굳이 부감독 넣을 필요 없다. 따라서 이런경우 count즉 감독인수만 한번 올려준다. 2. 위의 경우가 아닐경우 인원수에 B를 빼주고 이 뺴준값들에 부감독이 감시할수 있는 인원 C를 나누어 줄건데 몫이 0일 경우 부감독 1명으.. 2023. 3. 9.
백준 11659 구간합구하기4 c언어 https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 나의 첫번쨰 접근코드) #include int main() { int N,M,i,j,result; int first[100000] = {0}; int last[100000] = {0}; int arr[100000] = {0}; scanf("%d %d", &N, &M); i = 0; while (i < N) { scanf("%d", &arr[i]); i++; } i = 0; .. 2023. 3. 2.
백준 13305 주유소 c언어 https://www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 사고과정) 1. 이중 while문을 사용하여 문제를 해결할려고 접근 2. 굳이 이중 while문을 사용하지 않고 하나만 써도 가능할것이라 생각이들었음 3. 주유소1*(도로1) + 주유소1*(도로2) == 주유소1 * (총 도로) 라는 논리를 이용해서 문제해결 4. 주유소 1과 주유소 2를 비교하여 더작은 주유소를 기준으로 도로를 곱해준다. 개선점 || 비판점) 1. 굳이 N에 lon.. 2023. 2. 15.
백준 11399 ATM c언어 https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 사고) 1. 각 사람들의 기다리는 시간의 합을 구하는 문제인데 딱 보자마자 오름차순 정렬로 다 합쳐서 답을 구하면 될것이라 생각했다. 2. 오름차순 정렬에는 여러가지 방법들이 있지만 내가 알고 있는 정렬중에서 qsort정렬을 사용하기로 생각했다. 3. qsort함수가 빠르게 정렬할수 있다고 생각했다. 4. 정렬한후 각 사람당 기다리는 시간을 더해주는데 이때 while문을 한번더 사용하여 앞에 기다리는 시간도 합쳐질수 있도록했다.. 2023. 2. 14.
백준 11650 좌표정렬하기 c언어 https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 사고과정) 1. 퀵정렬을 이용해서 해결할려고 하니 내가 알거 있는 퀵정렬은 배열 하나만 사용해서 정렬하는 것이라 알고 있다. 2. 그래서 구조체를 이용해서 접근 하기로 생각했다. 3. 구조체 선언후 퀵정렬을 사용한다 이때 퀵정렬의 비교함수 부분을 아래와 같이 고쳐서 사용했다. 개선점 || 비판점) 나의코드) #include #include ty.. 2023. 2. 12.
백준 1427 소트인사이드 c언어 https://www.acmicpc.net/problem/1427 1427번: 소트인사이드 첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 1. 버블정렬이 생각났지만 비효율적인 정렬 방식이며 qsort정렬도 배웠기 때문에 이걸 이용하기로 결정 2. 기존 내가 알던 qsort정렬은 오름차순만 알고 있었는데 compare함수에 부호만 반대로 하면 내림차순이라 쉽게 만듬 3. 처음 배열을 result[] = {0}; 이렇게 선언하니까 세그먼트 오류가 떴다. 4. 그래서 어차피 숫자가 11자리가 최대이기 떄문에 result[11] = {0}; 로 바꿔 선언해주니 맞게 되었다. 나의코드) #include #include int .. 2023. 2. 3.
백준 1934 최소공배수 c언어 https://www.acmicpc.net/problem/1934 1934번: 최소공배수 두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있 www.acmicpc.net 1. 최소공배수를 구할때 유클리드 호제법을 이용해서 최대공약수를 우선 구해준다. 2. 최소공배수는 숫자1 * 숫자2 를 한값에 최대공약수를 나누어주면 최소공배수가 되는걸 이용해 해결한다. #include intEuclidean(int A, int B) { inttemp; if (A < B) { temp = A; A = B; B = temp; } if (B == 0) return.. 2023. 1. 29.
유클리드 호제법 c언어 구현하기 두 정수의 최대 공약수를 구하는 알고리즘 두 수 중에서 큰 수를 a, 작은 수를 b라고 하고 a를 b로 나눈다. a가 b로 나누어떨어지면 두 수의 최대공약수는 b이다. a가 b로 나누어떨어지지 않으면 a를 b로 나눈 나머지와 b에 대하여 1번부터 다시 반복한다. #include intEuclidean(int a, int b) { if (b == 0) return (a); else return (Euclidean(b, a%b)); } intmain() { inta = 10; intb = 4; printf("%d", Euclidean(10, 4)); return (0); } 10과 4 의 최대 공약수 = 2 가 출력된다. 위의 방법으로 최대 공약수를 구하면 최소공배수 = (a * b) / 최대공약수 2023. 1. 29.
728x90