분류 전체보기 48

[수학] 유클리드 호제법

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 EOF (scanner + buffered reader)

EOF란 end of file 더이상 입력 값이 없을 떄 콘솔을 종료하라는 의미이다. java에서 eof는 스캐너와 버퍼리더로 처리할 수있다. 스캐너의 장점은 쉽게 코딩할 수 있는 것이지만 메모리를 너무 많이 차지한다. 버퍼리더는 어렵지만 메모리를 많이 사용하지 않는다. 우선 scanner를 활용한 eof를 알아보자! import java.util.Scanner; public class eofPractice { public static void main(String[] args) { Scanner ss = new Scanner(System.in); while(ss.hasNextInt()) { System.out.println(ss.nextInt()); } } } hasNextInt란 입력받은 수가 정수면..

[JAVA] 2022.11.02

자바 쓰레드 synchronized

synchronized는 쓰레드를 동시에 사용할 때 동시에 임계영역에 들어오지 못하도록 할 수 있다. 1. wait() - 쓰레드 기다려! 2. notify() / notifyAll() - 쓰레드 가자! 일어나! 산책가자 예제) 생산자와 소비자 생산자 쓰레드가 데이터를 저장한 후 소비자 쓰레드가 데이터를 꺼낼 수 있다 , 생산자 쓰레드는 소비자 쓰레드가 버퍼에서 데이터를 가져가지 않았으면 데이터를 버퍼에 저장할 수 없고 wait() 풀이 1. 생산자 쓰레드와 소비자 쓰레드를 공동 저장할 수 있는 버퍼를 제작하자 Buffer.java public class Buffer { int data = 0; boolean available = false; public synchronized int get() { //..

[JAVA] 2022.10.31

소수를 찾아보자! (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