본문 바로가기

분류 전체보기237

알고리즘 특강 1일차 : dx, dy 테크닉 dx,dy 테크닉은 좌표를 상하좌우로 움직이는 알고리즘을 풀 때 주로 사용하는 방법이다. 사실 이 방식은 문제를 풀고 다른 사람 코드랑 비교하는 과정에서 많이 보았는데, 그냥 편해서 사용하는줄만 알았던 코드가 하나의 알고리즘 개념이었다니 신기했고, 앞으로는 이 방법을 적극적으로 이용해야겠다는 생각이 들었다! 0이 입력되면 동쪽으로, 1이 입력되면 남쪽으로, 2가 입력되면 서쪽으로 , 3이 주어지면 북쪽으로 가는 코드를 짜려고 한다. int nowNum = 0; int x = 1; int y = 1; if(nowNum == 0){ x++; } else if(nowNum = 1){ y--; } else if(nowNum = 2){ x--; } else if(nowNum =3){ y++; } 이러한 방식으로 .. 2023. 7. 24.
백준 [자바 java] 11399 : ATM https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 이 문제도 예전에 c언어로 풀었어서 java로 다시 한번 풀었다. 사람마다 atm을 이용하는 시간이 주어지고 이를 사용하는 사람들이 기다리는 전체 시간의 최솟값을 출력하는 문제이다. 이때 이용시간이 작은 사람 순서대로 정렬한 후 이 순서대로 atm을 이용하면 되니까, 정렬한 후 여기다가 (전체사람 수 - 해당 수의 배열 순서)를 곱하면 된다. (첫번째 사람이 돈을 뽑을 동안 기다리는 사람들의 수는 전체이고, 두번째 사람이 돈을.. 2023. 7. 23.
백준 [자바 java] 1541 : 잃어버린 괄호 https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 식이 주어지고 해당 식에 괄호를 적절히 쳐서 최종 값을 작아지게 만드는 문제이다. 해당 식은 더하기와 빼기만 있다. 이를 최대한 작게 만드려면 최대한 작은 수를 더하고 큰 수를 빼야한다. 따라서 괄호는 -를 제외하고 전부 넣어주면 된다. ex) 55 - (50 + 40) 77 - (55 + 30 + 2) - (44) - (41 + 25) 나는 식을 입력받으면 -를 기준으로 이를 split하고.. 2023. 7. 23.
백준 [자바 java] 1026 : 보물 https://www.acmicpc.net/problem/1026 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거 www.acmicpc.net 이 문제는 두 배열이 주어지고 두 배열간의 곱한 값을 더한 값이 최소가 되게 하는 문제이다. 핵심은 곱하는 두 수가 둘 다 큰 수이면 수가 많이 커지니까 이를 적절하게 조합하는 것이다. 가장 큰 수에는 가장 작은수를 곱하는 과정을 하기 위해서 두 배열을 다 정렬한 후 첫번째 배열은 앞에서부터, 두번째 배열은 뒤에서부터 곱해서 더해나가면 답을 구할 수 있다. import java.util.*.. 2023. 7. 23.
백준 [자바 java] 2839 : 설탕배달 https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 1년 전에 c언어로 풀었던 문제인데 이번 학습동아리를 위해 자바로 다시 풀었다. 이 문제는 그리디 알고리즘을 설명할 수 있는 가장 간단한 문제라고 생각한다. 최대한 적은 수의 봉지를 사용해서 설탕을 옮기는 방법을 구하는 문제인데, 이를 위해서는 5킬로그램 봉지를 최대한 많이 사용해야하면서도, 이를 사용하고 남은 설탕의 그람수가 3으로 나누어 떨어져야 한다. 따라서 나는 주어진 설탕의 수를 5로 나눈 후 이 .. 2023. 7. 23.
오리엔테이션 : 시간복잡도 계산 시간복잡도 : 내 프로그램이 수행하는 연산의 수를 수식으로 나타낸 것 보통 빅오(O) 표기법을 사용하는데 이는 최악의 경우를 기준으로 계산한다. for문 int ex(n){ int x = 0; for(int i = 0;i 2023. 7. 20.