[알고리즘] 8

순열, 조합, 부분집합 in JAVA

순열 순열이란 n개의 원소에서 r개의 원소를 *순서에 상관 있이* 뽑는 경우의 수를 의미한다. 공식 : nPr ex) 5종류의 음식 중에 2명이 각자 먹을 음식을 시키는 경우의 수(이때 음식을 중복으로 주문하면 안된다.) 5!/(5-2)! 코드 package permu; import java.util.Arrays; public class sunyul { static String arr[] = {"햄버거","피자","떡뽂이","샌드위치","김치찌개"}; static boolean visit[]; static String result[]; static int N = 2; // 고르는 개수 public static void main(String[] args) { // TODO Auto-generated met..

[알고리즘] 2023.02.26

counting 정렬과 [백준] 11650번

counting 정렬은 일정 상황에서 O(n+k)성능을 가지는 정렬이다. 일정 상황이란 배열의 min과 max를 알 수 있을 때 쓰인다. https://www.youtube.com/watch?v=Urmb0FpW6Hk 개념은 이 유튜브를 참고하였다. 개념을 쉽고 잘 설명해주었다. 구현을 위해서는 총 4단계가 필요하다. 1. 나타나는 값의 개수 세기 2. 누적합으로 배열 배꾸기 3. 누적합 배열에서 -1 4. 입력받은 배열 뒤에서부터 선회하며 결과값 자리 정하기 (이후 누적합 배열 -1 필요) 다음은 정확이 그대로 나타낸 코드이다(0부터 10까지 범위) import java.util.Arrays; import java.util.Scanner; public class Main { public static vo..

[알고리즘] 2022.12.08

[수학] 유클리드 호제법

https://ko.wikipedia.org/wiki/유클리드_호제법 유클리도 호제법이란 최대공약수를 구하는 방법을 말한다. 예시))))) 1071과 1029의 최대공약수 구하기 1. 1071을 1029로 나누기 --->나머지 42 2.1029를 42로 나누기 --->나머지 21 3. 42를 21로 나누기 --->나머지0 따라서 최대공약수는 21이다. 자바 알고리즘으로 구현하기 int GCD(int a, int b){ if(b==0) return a; return GCD(b,b%a); } 매우 쉬운 알고리즘이다. 이상황에서 최소공배수를 구하려면 최소공배수 = a*b/최대공약수 이다. 초등학교 때 배운 최소공배수 최대공약수이지만 [유클리드 호제법]이란 개념은 대학교 암호학 수업이후 처음 들어 포스팅 해보았다.

[알고리즘] 2022.11.17

binarysearch이진탐색이분탐색이라고 불리는 거 java로 만들어봐!

이진탐색을 자바로 만들어보자! 그 이전에 이진탐색이란? 다 탐색하기 힘드니까 반띵해서 찾아본다 이말이야. 여기서 중요한 점은 배열이 꼭!!!!!! 정렬이 되어있어야되 아직 잘 모르겠다고 ? 내가 그림을 그려줄꼐 배열의 크기가 6개인 배열에서 9를 찾는 그림이야. 배열의 처음과 끝의 중간인 2에서 부터 비교를 해 2의 값(4)이 9보다 작으니 low의 값을 mid+1로 옮겨야되 다음 상황이야 이번엔 mid(4)의 값이 7이지 아직도 9보다 작아 그럼 아까 했던 거 처럼 mid를 low로 바꾸고 (low+high)/2 +1 을 mid로 바꾸면 되 다음 상황을 보여줄께 찾았다! mid의 값이 찾던 9의 값이야 이렇게 되면 이진 탐색이 끝나게 되지 이 것을 내가 재귀함수로 짜봤어 잘봐 public static ..

[알고리즘] 2022.11.15

[백준] 1764번 듣보잡!!!!!문제 hashmap문제

https://www.acmicpc.net/problem/1764문제이다. 입력받은 첫번째 배열에서 두번째 배열과 공통되는게 있는지 묻는 질문이다. 편하게 배열로 받아서 처음부터 끝까지 검색하면 시간초과가 된다. 이럴 경우 hasmap을 이용해 문제를 풀자 중요한점은 출력할떄 "사전순"으로 출력 해야한다. 이부분을 놓쳐서 처음 제출때 틀렷다 ㅜㅜ 출력값을 찾은 후 정렬하는것이 시간적으로 이득이 많겠지만 값을 찾기전에 사전순으로 출력값을 찾는 코드로 짜보았다. import java.util.Scanner; import java.util.HashMap; import java.util.Collections; import java.util.ArrayList; public class Main { public st..

[알고리즘] 2022.11.15

소수를 출력해보자-2 (에라토스테네스의 체)

이전 글에서 소수를 출력한 적이 있지만 백준을 풀면서 에라토스테네스의 체를 알게 되었고 더 효율적이게 만들 수 있을거라는 생각이 들어 다시 포스팅합니다. 에라토스테네스의 체란? 2의 배수 걸러네! 3의 배수 걸러네! 4의 배수 ? 어 너는 이미 걸러졋구나! 5의 배수 걸러네! 만약 50까지의 소수를 찾는다면 7의 배수까지만 걸러네면 된다 7*7

[알고리즘] 2022.11.09

백준 1152번 : 단어의 개수

이번 문제는 입력받은 문장에서 단어의 개수를 세는 문제이다. 주의 할 점은 공백은 단어에 미포함이라는 점이다. 공백만 입력했을 때, space를 여러번 누르고 문장을 입력했을 때도 단어의 개수만 정확히 출력해야한다. import java.util.Scanner; import java.util.Arrays; import java.io.*; public class Main{ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStream..

[알고리즘] 2022.11.07

소수를 찾아보자! (java)

문제 : 숫자를 입력하면 입력된 숫자이하의 소수가 출력된다. ex) input : 9 output : 2 3 5 7 기본 원리 1. 소수는 true 소수가 아닌 수는 false 로 출력해보자 2. 소수가 아닌 수는 소수의 배수이다. import java.io.*; public class primenum { public static void main(String[] args) throws IOException{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String str1 = in.readLine(); int num1 = Integer.parseInt(str1); boolean Isprime[] = new boole..

[알고리즘] 2022.10.28