본문 바로가기

알고리즘107

[Java] 백준 25556 포스택 [Java] 백준 25556 포스택 풀이 랜덤으로 되어있는 순열을, 4개의 스택을 이용해서 오름차순으로 정렬을 하는 것이다 여기서 중요한 것은 각 모든 스택은 오름차순으로 나열이 되어 있어야 한다 이유는, 제일 큰 수를 오른쪽부터 왼쪽으로 숫자가 1씩 떨어지면서 정렬을 해야 하는 상황이다 그래서 만약에 스택에 모든 숫자를 넣을 수 있다면, 오름차순으로 정렬이 가능하다 반대로 스택에 숫자 하나라도 못 넣으면, 정렬이 불가능해진다 코드를 보게 되면, 스텍에 값들을 넣었지, 빼는 것은 생략했다 import java.util.Stack; import java.util.Scanner; import java.util.ArrayList; public class Main{ public static void main(S.. 2023. 6. 13.
[Java] 문제풀이 (Programmers) Java 문제풀이 (Programmers) 옷가게 할인 받기 10만원 이상은 5%, 30만원 이상은 10%, 50만원 이상은 20% 할인 소수점과 곱하는 것이라서 double을 사용해야 한다 그리고 값은 int 로 반환해서 구해야 한다 (소수점은 버린다고 써져 있) class Solution { public double solution(double price) { if (price < 100000) { return price; } else if(price < 300000) { return (int) (price * 0.95); } else if (price < 500000) { return (int) (price * 0.9); } else { return (int) (price * 0.8); } } } .. 2023. 6. 1.
[Java] 문제풀이 (Programmers) Java 문제풀이 (Programmers) 나머지가 1이 되는 수 찾기 가장 작은 수를 찾는 것이니깐, 1부터 시작해서 1씩 더하면서 n 과 나누면 된다 거기서 나머지가 1이 나오는 첫 번째 x 가 답이 되는 것이다 class Solution { public int solution(int n) { int answer = 0; int x = 1; while (n % x != 1) { x += 1; } answer = x; return answer; } } 없는 숫자 더하기 check(int value, int[] numbers) 0부터 9를 value로 받고, 배열 안에 있는지 확인을 한다 있으면 true를, 없으면 false를 반환한다 false이면 answer에 더해주면 된다 class Solution.. 2023. 5. 30.
[Java] 문제풀이 (Programmers) Java 문제풀이 (Programmers) 삼총사 수열을 잘 만들면 된다 삼총사를 구하면 되기 때문에, 3중 for문을 이용하면 된다 class Solution { public int solution(int[] number) { int answer = 0; for (int i = 0; i < number.length - 2; i ++) { for (int j = i + 1; j < number.length - 1; j ++) { for(int k = j + 1; k < number.length; k ++) { if (number[i] + number[j] + number[k] == 0) { answer += 1; } } } } return answer; } } 나머지 구하기 연산자 % 를 사용하여, 나머.. 2023. 5. 28.
[Java] 문제풀이 (Programmers) Java 문제풀이 (Programmers) 분수의 덧셈 (numer1 / denom1) + (numer2 / denom2) 의 값을 구해, 분자는 answer[0]에, 분모는 answer[1]에 저장하는 것이다 먼저 answer[0]와 answer[1]에 나누지 않은 채로, 그냥 더해서 저장을 한다 그리고 2부터 시작해서 for문을 돌면서 answer[0]과 answer[1]를 나눌 수 있으면, 계속 나눠준다 최대공약수를 나누는 방법과 똑같은 것이다 (대신 최대공약수를 따로 구하는 것이 아니라, 최대공약수를 구하는 식을 for문과 while문을 통해서 구하는 것이다) class Solution { public int[] solution(int numer1, int denom1, int numer2, in.. 2023. 5. 26.
그래프 탐색 🧑‍💻 그래프 탐색 멀티잇 코딩테스트 러닝클래스'Python 5월반 구름이의 여행 연결되어 있는 섬들을 K개 이하로 갈 수 있는지 확인하는 것 BFS를 이용하여, 최단 거리 구하기를 하였다 1번부터 N번 섬까지 못 갈 수도 있음 그러기 위해 flag를 이용하여, 못 가면 False 즉 NO 를 출력하도록 유도 N번 섬에 도착하면 answer에다가 몇 번을 움직였는지 저장을 한 후, K번 이하인지 구별하기 from collections import deque N, M, K = map(int, input().split()) island = [[] for _ in range(N + 1)] visited = [False] * (N + 1) queue = deque([]) answer, flag = 0, Fals.. 2023. 5. 25.
다이나믹 프로그래밍 🧑‍💻 다이나믹 프로그래밍 멀티잇 코딩테스트 러닝클래스'Python 5월반 미리 저장된 값을 어떻게 활용할 수 있을지 생각을 한다 피보나치 수 같은 경우, 1번째와 2번째를 미리 구하고, 그 앞 두 숫자를 이용하여 값을 구하는 것이다 피보나치 수 재귀로 풀이 (Runtime Error) user_input = int(input()) def fibo(num): if num == 0: return 0 elif num == 1: return 1 return fibo(num - 2) + fibo(num - 1) print(fibo(user_input) % 1000000007) 리스트로 풀이 user_input = int(input()) fibo = [1, 1] for i in range(2, user_input.. 2023. 5. 24.
그리디 알고리즘, 원인과 결과 찾기 🧑‍💻 그리디 알고리즘, 원인과 결과 찾기 멀티잇 코딩테스트 러닝클래스'Python 5월반 거스름돈 1, 5, 10, 20, 40 원이라는 동전이 있다 N원을 거슬러 주기 위한 최소의 동전의 개수를 구하는 것 기본적으로 40부터 시작해서, 남은 나머지를 계산해주면 된다 N = int(input()) coin = [40, 20, 10, 5, 1] count = 0 for c in coin: if c temp_end: count += 1 temp_end = end print(count) 2023. 5. 23.
기초 자료구조의 구현과 응용 🧑‍💻 기초 자료구조의 구현과 응용 멀티잇 코딩테스트 러닝클래스'Python 5월반 Stack 말 그대로 stack을 구현하면 된다 stack은 Last In First Out 규칙을 가지고 있다 stack에 들어갈 수 있는 용량이 정해졌다 stack이 이미 꽉 찼을 때에, 값을 넣어야 하면, "Overflow"를 출력 stack에 아무것도 없는데, 값을 빼야 하는 명령어가 실행되면, "Underflow"를 출력한다 N, K = map(int, input().split()) stack = [] for _ in range(N): command = list(input().split()) if command[0] == "push": if len(stack) < K: stack.append(int(command.. 2023. 5. 22.