알고리즘 12

[Algorithm] 유클리드 호제법(유클리드 알고리즘) _ 재귀 함수

재귀 함수란 자기 자신을 재 호출하는 함수를 말한다. 예를 들어 코드를 보자 package algorithm; public class recursive_fun { public static void main(String[] args) { recursive_function(); } public static String recursive_function() { System.out.println("재귀 함수 호출"); return recursive_function(); } } 위와 같은 코드가 있다면 recursive_function() 함수를 호출한 뒤 "재귀 함수 호출"을 print 하고 다시 recursive_function() 함수를 재호출하여 "재귀 함수 호출"을 print 하는 방식을 반복한다. 그 ..

[프로그래머스] 큰 수 만들기 for JAVA _ 그리디 알고리즘

https://programmers.co.kr/learn/courses/30/lessons/42883 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 안봐도 되는 실패기 위의 문제 알고리즘은 왼쪽 숫자부터 그 옆 숫자와 비교하여 오른쪽 숫자가 더 크면 왼쪽 숫자를 지우는 방식을 사용하였다. 그러니까 4177252841 에서 4, 1을 비교하면 4 < 1 이므로 넘어가고 1 < 7 이므로 1을 삭제한다. 그러면 477252841이 되고 4 < 7 이므로 4를 삭제하여 77252841이 되고 2 < 5 이므로 2를 삭제하여 7752841, 2 < 8 이므로 775841 이 return 되는 것이다. 그래..알고리즘은 이렇게 짰고 구현을 할 때 2중 for문으로 k번 만큼 돌게, 왼쪽부터 훑..

[프로그래머스] 체육복 for JAVA

그리디 알고리즘에 분류되어있는 level1짜리 문제이다. 내가 풀려던 방법은 arraylist에 1~n까지의 수를 다 넣고 lost인 사람의 숫자를 없애고 reserve -1 과 +1을 비교해서 넣는 방법을 사용하려고 했는데 모든 테스트케이스를 통과하지 못했다.. 50점이었나...? 지금 보니 왜 저렇게 짰는지... 그래서 남의 코드를 봤다!! 내걸로 만들려고 리뷰할거다. 풀이1 1. 먼저 여벌 체육복을 가져온 학생이 잃어버렸으면 +-0이므로 걔네 먼저 확인해줘야한다. 2중 for문으로 lost 배열과 reserver 배열에 같은 값이 있는지 확인하고 같은 값이 있다면 answer에 +1 해주고(수업참여 가능) 두 배열 값을 -1로 초기화한다. 2. 도난당한 학생에게 체육복 빌려주기 여분이 있는 학생은 ..

[BaekJoon]백준 11047번_동전0 for JAVA

동전0 이 문제는 그리디 알고리즘 유형에 있는 문제이다. https://ticssfm.tistory.com/32?category=1008893 [Algorithm] 탐욕(그리디) 알고리즘 (greedy algorithm) 그리디 알고리즘은 문제를 해결하는 과정에서 가장 좋다고 생각하는 방법을 선택하는 알고리즘이다. 예를 들어 노드 값의 최대 합은 5 -> 7 -> 9를 거쳐 21임을 알 수 있다. 그러나 그리디 알고리즘 ticssfm.tistory.com 필요한 동전의 개수라는 말만 봐도 그리디를 사용함을 알 수 있다. 그리디는 가장 최적의 값을 우선적으로 할당해주는 알고리즘이므로 본 문제를 풀 때 가장 큰 값을 먼저 대입해봐야한다. Ai는 Ai-1의 배수라는 말은.. 어차피 입력은 여기서 해줄 것이기 ..

알고리즘/백준 2021.10.05

[BaekJoon] 백준 2581번_ 소수 for JAVA

소수 정말 개많이 틀린 문제;;;.... 결국 남의 코드를 참고했다. 예전에 정리했던 적이 있었는데 최적의 코드라고 보기는 어려웠고 백준에서 맞은 사람의 코드도 살펴보았는데 다들 비슷하게 푼 느낌이라 넘어갔었다. 아무튼 이번 문제는 에라토스테네스의 체라는 방법을 다들 사용하였다...!! 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Baek2581 { // 소수 public static boolean prime[]; public static void main(String[] args) throws IOException { BufferedReader br = ..

알고리즘/백준 2021.10.04

[Algorithm] 탐욕(그리디) 알고리즘 (greedy algorithm)

그리디 알고리즘은 문제를 해결하는 과정에서 가장 좋다고 생각하는 방법을 선택하는 알고리즘이다. 예를 들어 노드 값의 최대 합은 5 -> 7 -> 9를 거쳐 21임을 알 수 있다. 그러나 그리디 알고리즘을 사용하면 그때그때 최대값이 될 것이라고 추측되는 값을 사용하게 된다. 따라서 5 다음에 7, 10, 8 중 가장 큰 값인 10을 사용하고 4, 3 중 큰 값인 4를 사용하게 된다. 이처럼 그리디 알고리즘이 문제의 해결에 있어서 최적의 해를 매번 보장하지는 않는다. 그러나 그리디 알고리즘은 계산 속도가 빠르다. 그리디 알고리즘이 적절하다고 판단되는 문제에서는 최적의 해를 빠르게 산출할 수 있다. 예시 출처 : 이것이 취업을 위한 코딩 테스트다 예를 들어 N = 5이고 각 모험가의 공포도가 2 3 1 2 2..

[BaekJoon] 백준 1011번 _Fly me to the Alpha Centauri for JAVA

https://www.acmicpc.net/problem/1011 1011번: Fly me to the Alpha Centauri 우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행 www.acmicpc.net 먼저 문제를 보고 2^31값까지 가능하므로 int값을 사용하기로 하였다. 이 문제에서 중요한 것을 x와 y의 값보다는 x와 y의 거리이다. 그래서 y - x 값인 거리값을 사용할 것이다. 문제가 너무 복잡하니까 표로 정리해서 어떤 값을 넣으면 어떤 값이 나오는지 확인해보자!! 거리 move count (출력값) max움직임 1 1 1 1 2 1 1 2 ..

알고리즘/백준 2021.09.24

[Algorithm] 이진 검색 알고리즘

이진 검색(binary search)은 요소가 오름차순 또는 내림차순으로 정렬된 배열에서 검색하는 알고리즘이다. 예시를 보자!! 이렇게 가운데에 있는 값을 확인하면서 검색하는 방법이 이진검색이다. 처음 시작할 때 a = 0이고 b = n-1값이면 검색할 가운데 값은 (a+b) / 2 값이 된다. 오름차순일 때 키값이 찾으려는 값보다 크면 b값은 중앙값 - 1 이 되고 키값이 찾으려는 값보다 작으면 a값은 중앙값 + 1이 된다. 이 방법을 코드로 짜보면 import java.util.Scanner; public class binarysearch { static int binSearch(int[] x, int n, int key) { int a = 0; int b = n - 1; do { int c = (a..

[BaekJoon] 백준 2775번_부녀회장이 될테야 for Java

백준 2775번 -부녀회장이 될테야 0층은 i호만큼 사람이 있고 1층 1호 : 0층 1호 2호 : 0층 1호 + 2호 3호 : 0층 1호 + 2호 + 3호 2층 1호 : 1층 1호 2호 : 1층 1호 + 2호 3호 : 1층 1호 + 2호 + 3호 이런식이므로... 찾으려는 층 호의 인원수를 구하려면 그 전층과 그 전전층,.... 이렇게 내려와서 0층까지 내려와야한다. 이럴 때 쓰는 재귀함수!!!!!! 알아서 돌라는 뜻이다.....! package Baek; import java.util.Scanner; public class Baek2775 { // I want to be an apt president public static void main(String[] args) { Scanner scan = n..

알고리즘/백준 2021.09.13

[Algorithm][Java] 소수를 나열하는 알고리즘, 소수인지 판단하기

정수 n에 대하여 아래의 조건을 만족시키면 소수임을 알 수 있다. 2부터 n-1까지의 어떤 정수로도 나누어떨어지지 않는다. 먼저 어떤 정수 이하의 소수를 모두 나열하는 알고리즘을 직관적으로 풀어보자. public class PrimeNumber { public static void main(String[] args) { int counter=0; for(int n = 2; n