분류 전체보기
[Java] 버블정렬(Bubble sort)
안녕하세요 코북입니다. 오늘은 버블 정렬을 활용하여 오름차순 정렬하는 문제를 풀어봤습니다. 버블 정렬의 경우 사실상 거의 사용되지 않는 알고리즘이지만, 반대로 가장 기초적인 정렬 알고리즘이기 때문에 정렬 알고리즘에 대해 배우면 가장 먼저 배우는 알고리즘 중 하나일 것입니다. 정의 버블 정렬이란 두 인접한 원소를 검사하여 정렬하는 방법으로 시간복잡도가 O(n²)으로 상당히 느리지만, 코드가 단순하기 때문에 자주 사용됩니다. 원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어진 이름이라고 합니다. 과정 (오름차순 기준) 1. 앞에서부터 현재 원소와 바로 다음의 원소를 비교 2. 현재 원소가 다음 원소보다 크면 원소를 교환 3. 다음 원소로 이동하여 해당 원소와 그 다음 원소를 비교 풀이 ..
[GitHub] github 한글 인코딩
깃 허브 소스를 올릴 때 한글이 깨진다면 인코딩을 해주면 됩니다. git bash에서 인코딩 명령을 해줍니다. $git config --global gui.encoding utf-8
[Java] 10진수 2진수로 변환
안녕하세요 코북입니다. 오늘은 10진수를 2진수로 변환하는 코드를 작성해봤습니다. 이 문제를 풀려면 십진법 수를 이진법 수로 나타내는 방법에 대해 알아야 하는데요. 십진법 수를 몫이 0이 될 때까지 2로 나누어서 생긴 나머지를 역순으로 적으면 됩니다. public class Java17 { public static void main(String[] agrs) { Scanner sc = new Scanner(System.in); System.out.print("숫자입력 >> "); int a = sc.nextInt(); ArrayList list = new ArrayList(); // 10진법으로 나타낸 수를 2진법으로 타나내려면 // 몫이 0이 될 때까지 계속 2로 나누어서 생긴 나머지를 역순으로 적으면..
[Java] 가까운 거리 찾기 (1차원)
안녕하세요 코북입니다. 학원 다닐 때 풀었을 때 꽤나 어렵다고 생각했던 문제였는데, 다시 풀어보니 역시나 헷갈렸습니다. 예전만큼 헤매지는 않았지만 부족한 점이 많다고 생각돼 기록하러 왔습니다. 다음은 첫 번째 풀이입니다. public class Java16 { public static void main(String[] args) { int[] point = {92, 32, 52, 9, 81, 2, 68}; // 거리 값을 저장할 배열 int size = 0; // 배열 크기 for(int i=1; i
[Java]수열 n번째 항까지 출력
안녕하세요 코북입니다. 즐거운 설 연휴네요. 즐거운 마음으로 오늘 수열 문제 풀어봤습니다. 먼저 수열 값을 구하는 메소드를 만든 후에 n번째 항까지 출력하도록 반복문을 만들어줬습니다. 위에 나온 수열은 다음 수가 나올 때 1씩 증가한 값이 더해지는 규칙을 가지고 있습니다. 첫 번째에 1이 나온 후 두 번째는 1+1, 세 번째는 1+1+2, 네 번째는 1+1+2+3이 나오게 됩니다. 반복하면 다음과 같은 규칙이 나옵니다. 첫 번째 : 1 두 번째 : 1(첫 번째 값) + 1 세 번째 : 1+1(두 번째 값) + 2 네 번째 : 1+1+2(세 번째 값) + 3 ... n 번째 : (n-1 번째 값) + (n-1) n이 1인 경우를 제외하면 n을 입력했을 때 n-1 번째 값과 n-1을 더한 값이 결괏값으로 나..
[error/Java]Implicit super constructor Unit() is undefined. Must explicitly invoke another constructor
상속받은 클래스에 디폴트 생성자가 없는 경우 발생하는 에러, 상속받은 클래스에 디폴트 생성자를 생성해주면 해결된다.
[Java]소인수분해
안녕하세요 코북입니다. 오늘은 소인수분해에 대한 문제를 풀었는데 여러가지 풀이 방법이 있어 기록하려고 합니다. 먼저 소인수분해의 뜻을 알아야 문제를 풀 수 있습니다. 어렸을 때부터 들어봤지만 정확히 무슨 뜻인지는 저도 잘 몰랐던 것 같습니다. 소인수분해란? 소인수분해는 어떤 수를 소수인 인수로 분해하는 것이다. 소수는 1과 자기 자신으로만 나누어 떨어지는 정수를 의미한다. 소인수분해가 중요한 이유는 현대 암호학의 가장 기본 토대가 되는 부분이기 때문이다. 두 수의 곱셈을 결과로 나타내기는 쉬워도 결과를 두 수의 곱셈으로 나타내기는 어렵다는 역발상에서 시작되는 것이 암호학의 기초이기 때문에 그렇다고 한다. 저는 두 가지 방식으로 문제를 해결했습니다. 첫 번째는 while문과 if문을 사용한 풀이이고, 두 ..
[Java]팩토리얼 - 재귀 함수
안녕하세요 코북입니다. 오늘은 팩토리얼 문제를 풀었는데, 반복문을 통해 푸는 방법과 재귀 함수를 사용해서 푸는 방법이 있었습니다. 반복문 풀이 public class Java08 { public static void main(String[] agrs) { Scanner sc = new Scanner(System.in); System.out.print("입력 : "); int num = sc.nextInt(); int fact = 1; //곱해야 하므로 기본값을 1로 설정 for(int i=2; i
[Java]최대 공약수, 최소 공배수 구하기(feat.유클리드 호제법)
안녕하세요 코북입니다. 오늘은 최대 공약수와 최소 공배수를 구하는 문제를 풀어봤습니다. 풀이가 다양하여 제가 푼 방식을 공유해보려고 합니다. 첫 번째 방식은 문제에 나와있는 것처럼 최대 공약수와 최소 공배수의 개념에 대해 파악한 후 문제에 접근했습니다. 최대 공약수란? 0이 아닌 두 개 이상의 정수의 공통되는 약수 중에서 가장 큰 수이다. 따라서 두 정수 a와 b의 최대 공약수는 a의 약수인 동시에 b의 약수인 수, 즉 두 정수 a, b의 공약수 중에서 가장 큰 수를 의미한다. 여기서 '공통되는', '동시에'라는 특징이 나오기 때문에 &&를 사용하여 값을 구하려고 하였습니다. "최소 공배수는 0이 아닌 두 개 이상의 정수의 양의 공배수 중에서 가장 작은 수이다."라고 나와 있지만, 최대 공약수를 활용하여..
[Java]1-2+3-4+...+99-100 계산
안녕하세요 코북입니다. 이 문제는 두 가지 방식으로 풀어봤습니다. 첫 번째는 다음과 같이 for문 안에서 변수를 두 가지 사용하여 구하는 방법이고, 두 번째는 for문 안에 하나의 변수와 if문을 사용하여 구하는 방법입니다. 1번 풀이 public class Java05 { public static void main(String[] args) { int plus = 0; int minus = 0; for(int i=1, j=2 ; i