JAVA 6

[Java] 순열과 조합, 중복순열과 중복조합까지(재귀)

순열(Permutation) nPr로 표현하며 서로 다른 n개의 원소에서 r개를 중복 없이 순서를 고려하여 선택하는 혹은 나열하는 것이다. 예를 들어 서로 다른 4개의 원소 {1, 2, 3, 4}에서 2개를 중복 없이 순서를 고려하여 나열한다고 가정해보자. 그러면 {1, 2}, {1, 3}, {1, 4}, {2, 1}, {2, 3}, {2, 4}, {3, 1}, {3, 2}, {3, 4}, {4, 1}, {4, 2}, {4, 3}로 12개의 원소를 찾을 수 있다. 이것을 식으로 표현하면 아래와 같다. nPr = n! / (n - r)! 앞서 구했던 4개의 원소 중 2개를 뽑는 경우를 식에 대입해보자 4! / (4 - 2)! → 4! / 2! → 4 x 3 = 12가 나와 우리가 찾은 원소의 수와 동일함을..

JAVA 2022.10.23

[Java] 소수 판별 함수(메소드) isPrime

isPrime 메소드 프로그래밍 언어를 학습하다보면 소수를 구해야하는 순간이 언젠가 찾아오게 된다. 그렇다면 소수란 무엇일까? 소수(prime number) 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수. 즉, 1과 n 사이에 n을 나눌 수 있는 다른 수가 없다면 소수라는 것이다. *참고로 소수가 아닌 수를 합성수라고 부른다! isPrime 메소드의 자바 코드 public static int isPrime(int n) { for (int i = 2; i

JAVA 2022.10.04

[Java] GCD 알고리즘(최대공약수) & LCM 알고리즘(최소공배수)

GCD(Greatest Common Divisor) 알고리즘 GCD란 영어 단어 그대로 최대공약수라는 뜻이다. 최대공약수는 공약수 중에서 가장 큰 값을 의미한다. 우선 최대공약수를 구하기 위해서는 공약수가 무엇인지부터 알아내는 것이 먼저이다. 최대공약수를 구하기 전에 공약수를 알아보자! 공약수 사전에서는 둘 이상의 정수에 공통된 약수라고 정의되어 있다. 정수 두 개를 놓고 보았을 때, 둘 다 나누어 떨어지게 만들 수 있는 수를 공약수라고 한다. 예를 들어 16과 24가 있다고 했을 때, 16의 약수: 1, 2, 4, 8, 16 24의 약수: 1, 2, 3, 4, 6, 8, 12, 24 16과 24의 공약수는 1, 2, 4, 8이다. 그렇다면 최대공약수는 8이 되는 것이다. 유클리드 호제법(Euclidea..

JAVA 2022.10.03

[Java] 문자열 치환(공백, 특수문자) replace() 사용법

replace() 문자열에 포함된 특정 문자나 부분 문자열을 바꾸고 없애고 싶을 때가 있다.(마음이 그렇다는건 아님) 보통 누가 시켜서 하는 일일텐데, 알고리즘 문제의 조건이 대부분일 것이다. replace 메서드는 이런 상황에 마주치게 됐을 때, 우리를 도와주는 좋은 친구이다. replace()와 더불어 replaceAll(), replaceFirst()까지 알아보자. replace() replace 메서드는 원하는 문자로 문자열을 치환할 수 있다. replace의 괄호 안에는 String과 char가 둘 다 올 수 있다. 여기서 String은 엄밀히 말해 인터페이스인 charSequence를 구현한 클래스이다. 직접 코드를 보면서 이해해보자! String str = "예림이, 그 패 봐봐!"; // ..

JAVA 2022.09.27

[Java] StringTokenizer 사용법, split()과의 차이

StringTokenizer 알고리즘 문제를 풀다보면 한 줄에 입력을 받은 내용을 나눠서 저장해줘야 하는 경우가 생긴다. 문자열을 하나씩 나눠야 할지, 공백을 기준으로 나눌지 혹은 콤마(,)를 기준으로 나누는지에 따라 다를 것이다. 이 기준을 정할 수 있도록 하는 것이 구분자인데 자주 쓰는 구분자는 문자열을 하나씩 나눌 때("") 공백(" ") 특수문자("," 또는 ".") 등이 있다. 이러한 구분자들을 이용하게 되면 보통의 경우는 아래처럼 split()을 사용할 것이다. String str = "Happy Day!"; String[] strArr = str.split(" "); [Happy, Day!] 물론 split() 메서드를 사용하는 것도 좋다. 하지만 StringTokenizer와의 차이를 구분..

JAVA 2022.09.25

[Java] BufferedReader, BufferedWriter 사용법

BufferedReader & BufferedWriter 자바에 처음 입문하게 되면 가장 처음에 배우는 것이 입력과 출력일 것이다. 아마 대부분은 Scanner & System.out.println()으로 입출력을 해결할 것이다.(거의 무당) 만약, 입력과 출력이 엄청나게 많이 필요한 경우라면 기존에 사용하던 Scanner와 System.out.println()은 성능 면에서 메리트가 없다. 느리다는 것이다. 성능에 차이가 생기는 이유는 버퍼 사용 여부로 설명할 수 있다. Scanner & System.out.println() 키보드에 입력이나 화면에 출력을 할때마다 프로그램에 곧바로 데이터를 전달한다. BufferedReader & BufferedWriter 키보드에 입력이나 화면에 출력을 해야할 때마..

JAVA 2022.09.24