본문 바로가기

알고리즘146

[Java] Queue [Java] Queue Queue는 선입선출, FIFO (First In First Out)으로 제일 먼저 들어간 값이, 제일 먼저 나오는 자료구조다 식당 줄을 서서 기다리는 것과 같다 (제일 먼저 와서 기다린 사람이, 제일 먼저 들어간다) Queue 클래스를 이용하여 사용할 수 있다 import java.util.LinkedList; import java.util.queue; Queue queue = new LinkedList(); Enqueue 는 값을 큐에 넣는 것이다 // enqueue 메서드 queue.add(value); queue.offer(value); Dequeue는 값을 큐에서 빼는 것이다 (위에 설명과 같이, 제일 먼저 들어온 값이 제일 먼저 빠진다) // dequeue 메서드 que.. 2023. 6. 13.
[Java] Stack [Java] Stack Stack은 Last In First Out, 후입선출이다 즉 제일 늦게 stack에 들어간 값이, 제일 먼저 나오게 된다 책을 쌓아뒀다고 생각하면 된다 책을 쌓아두게 되면, 제일 위에 있는 책을 먼저 꺼낸다 자바에는 스택 클래스가 존재한다 import java.util.Stack; Stack stack = new Stack(); Stack에 값 넣기 stack.push(value); stack에서 값을 빼기, 무조건 제일 늦게 추가된 값이 빠지게 된다 stack.pop() 조회를 할 때에는 제일 늦게 들어간 값을 조회한다 stack.peek(); 그 외 // 값이 있는지 확인 stack.contains(1); // 스택의 사이즈 출력 stack.size(); // 스택 안에 값이.. 2023. 6. 13.
[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.