자바 8

재귀 알고리즘

재귀란? 어떤 사건이 자기 자신을 포함하고 다시 자기 자신을 사용하여 정의되는것을 말한다. 간단한 예로 팩토리얼을 들 수가 있다. n! = n * (n-1) 팩토리얼을 메서드로 구현하여 사용한 코드는 다음과 같다. import java.util.*; public class Main { //양의 정수 n의 팩토리얼을 반환합니다. static int factorial(int n){ if(n>0) return n * factorial(n-1); else return 1; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("정수를 입력하세요.:"); int x = scanner.n..

자료구조 2022.07.17

큐(Queue)

큐란? 데이터를 일시적으로 쌓아놓은 자료구조이다. 데이터의 입출력순서는 선입선출(먼저 들어온 것이 먼저 나감)이다. 큐에 데이터를 넣는 작업을 인큐(enqueue), 꺼내는 작업을 디큐(dequeue)라고 한다. 즉 어떤 데이터를 인큐하면 큐의 맨 뒤에 데이터를 추가하고, 데이터를 디큐하면 큐의 맨 앞 데이터를 제거한다음 한칸씩 앞으로 당긴다. 근데 이렇게 디큐할때의 복잡도는 O(n)으로, 데이터를 하나 꺼낼때마다 이런 처리를 한다면 효율이 매우 떨어진다. 이런 문제점은 링버퍼를 사용하여 큐를 구현하면 개선할 수 있다. 프런트와 리어 값을 업데이트하며 인큐와 디큐를 수행하게 되기 때문이다. [ O(1) ] 다음은 링버퍼로 큐를 구현하는 코드이다. 구간별 설명은 주석으로 대신한다! import java.u..

자료구조 2022.07.16

스택(Stack)

스택이란? 데이터를 일시 저장하는 자료구조. 데이터의 입출력순서는 후입선출(나중에 들어온 것이 먼저 나감)이다. 스택에 데이터를 넣는 작업을 푸시(push) 스택에서 데이터를 꺼내는 작업을 팝(pop)이라고 한다. 자바에서 메서드를 호출하고 실행할때도 내부적으로 스택을 사용한다. 다음은 스택클래스 IntStack을 구현하고 이를 사용하는 프로그램이다. 각 메서드에 대한 설명은 주석에 적혀있다! import java.util.*; public class Main { static class IntStack{ private int max; //스택 용량 private int ptr; //스택 포인터 private int[] stk; //스택 본체 //실행시 예외: 스택이 비어있음 public class Emp..

자료구조 2022.07.16

다차원 배열의 복제

자바에서 다차원 배열의 복제는 최상위 1레벨만 수행한다. 예를 들어 1차원배열의 복제를 생각해보면, int[] a = {1, 2, 3}; int[] b = a.clone(); 이 경우에 b는 a의 배열을 공유하는 것이 아니라 복제한다. (깊은 복사, Deep copy) int[][] a = {{1, 2, 3, 4}, {5, 6, 7}}; int[][] b = a.clone(); // 1차원배열만 복제되어 b[0], b[1]의 주솟값만 따로가지고, 그 아래 레벨의 배열은 복제되지않고 공유된다. 하지만 2차원 배열에서는 최상위 1레벨 즉, 1차원만 복제하고 그 아래 레벨에 대해서는 그냥 공유만 한다. (얕은 복사, Shallow copy)

기타 개발공부 2022.07.15

한 해의 경과일수 구하기 [java]

자바의 2차원 배열을 이용하여 한 해의 경과일수를 구하는 코드이다. 평년과 윤년을 2차원배열에 담아 사용했다. import java.util.*; public class Main { static int[][] mdays = { {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, //평년의 일수 {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, //윤년의 일수 }; //year년은 윤년인가 평년인가? (윤년이면 1, 평년이면 0) static int isLeap(int year){ return (year%4==0 && year%100!=0 || year%400==0) ? 1 : 0; } //y년 m월 d일의 그 해 경과 일 수를 ..

자료구조 2022.07.14

16진수 10진수로 변환하기 (백준 1550번, 진수 내장함수 쓰지않고)

입력으로 16진수를 받아 10진수로 변환하여 출력해주면 되는 문제다 자바의 진수변환 내장함수를 사용하면 훨씬 간단하게 구할 수 있지만, 이번에는 내장함수 없이 풀어보았따 import java.util.*; public class Test { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); String input = scanner.next(); String[] arr = input.split(""); String[] numArr = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"}; int multiplyNum = 0; int sum = 0;..

알고리즘 2022.02.22

자바 큰정수 BigInteger클래스 (1271번 엄청난 부자2)

정말정말 간단한 로직의 문제인데도 이유모를 런타임에러로 엄청 헤멨던 문제,,,ㅠㅠ 내가 헤멨던 과정을 적어보고자 한다. 1. 첫번째 시도 >> scanner만 사용 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int money = scanner.nextInt(); int life = scanner.nextInt(); System.out.println(money/life); System.out.println(money%life); } } 너무 쉽다고 생각하고 scanner로 작성했는데 어림도없이 런타임오류가 떴다. 여기까지..

알고리즘 2022.02.22

자바 기본서공부+생활코딩

2학기 수업 주교재였던 명품자바프로그래밍으로 공부하면서 적었던 글이다. 자바입문이면 맨밑링크에서 추천하는 최신버전 생활코딩강의 > 기본서 공부를 강추한다! https://blog.naver.com/jia5232/222486102757 [java] 명품 java programming 챕터1 자바 시작 이책을 왜 선택하게 되었냐면 이게 내가 2학기에 듣는 자바수업의 주교재다.... 근데 이걸 시키고나서 집으... blog.naver.com https://blog.naver.com/jia5232/222487333376 [java] 명품 java programming 챕터2 자바 기본 프로그래밍 부제 : 예제의 지옥 역시 850페이지 기본서답게 내용이 아주 알차다^^ 진짜 하루종일 했는데 챕터2 겨우 끝... ..

기타 개발공부 2022.02.07