전체 글

개발 공부하는 블로그
괄호 풀기 public class BracketWithoutStack2 { public static void main(String[] args) { String brackets = "((()()))())"; while (brackets.indexOf("()") != -1) { String[] split = brackets.split("\\(\\)"); System.out.println(Arrays.toString(split)); brackets = String.join("",split); System.out.println(brackets); } } } DB 연관관계 course-student-db를 구현하면서 user 테이블과 course 테이블을 연결해야 했는데 두 테이블을 연결하는 방법은 2가지가 있..
스택스택은 각티슈, 감자칩과 같다. 위에 있는 것이 먼저 나오고, 먼저 들어간 것이 아래에 깔린다. push : 감자칩을 넣는것 pop : 감자칩을 꺼내는 것 peek : 맨 위의 값을 확인하는 기능 (꺼내지 않음) isEmpty : 비었는지 확인. pop이나 peek 전에 보통 isEmpty로 확인함. jvm에도 스택 영역이 있다. 스택 영역에는 primitive 타입 변수가 저장되는데, 함수 호출 과정도 스택에서 관리한다. 예를 들어 다음 식을 계산하면, plus(minus(30, multiple(4 * 5)) , 20) = plus(10, 20) → push plus() → push minus() → push multiple() → pop multiple() → pop minus() → pop pl..
삽입정렬 삽입 정렬은 i번째 값이 들어갈 위치를 찾아 삽입하는 것 같다하여 삽입 정렬이라 한다. 삽입 정렬의 i는 1부터 시작한다. 인덱스 i번째 값과 그 왼쪽에 있는 값들을 비교한다. i와 i-1, i와 i-2 …. 이런식으로 진행된다. 진행 로직을 나타내면 길이가 3인 배열일 경우 i = 1일 때 인덱스 1과 인덱스 0 비교, i = 2일 때 인덱스 2와 인덱스 1 비교, i = 2일 때 인덱스 1과 인덱스 0 비교, i = 3일 때 인덱스 3과 인덱스 2 비교, i = 3일 때 인덱스 2과 인덱스 1 비교, i = 3일 때 인덱스 1과 인덱스 0 비교 이런식으로 진행된다. 가장 오른쪽에서부터 가장 오른쪽 값과 그 왼쪽값. 그 다음은 한칸 왼쪽으로 옮겨가서 해당 값과 그 왼쪽값을 비교하는 형식이다. ..
버블정렬 버블 정렬은 arr[i]와 그 다음 값인 arr[i + 1]을 비교하기 때문에 for문의 조건식을 배열길이 -1 로 해주어야 한다. i가 배열길이만큼 돌게 되면 i + 1은 존재하지 않는 값이기 때문에 오류가 발생하게 된다. int[] arr = {7, 2, 3, 9, 28, 1}; for (int i = 0; i arr[i + 1]) { int temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } System.out.println(Arrays.toString(arr)); } 위 코드 실행 시 정렬이 완벽하게 되지 않음을 확인할 수 있다. 왜냐하면 i와 i + 1 인접한 두 값만 ..
배열은 한번 선언하면 크기를 변경할 수 없다. 그래서 나온 것이 List이다. List 자료형List는 Collection 인터페이스를 구현한 인터페이스로, 배열과 다르게 동적으로 크기를 변경할 수 있는 자료구조이다. List의 구현체로는 ArrayList, LinkedList 등이 있다. List 선언과 초기화List l1 = new ArrayList();List는 다음과 같이 선언한다. 부모오브젝트 변수명 = new 자식오브젝트( ); .add( ) : 값 추가l1.add("hello"); l1.add(1);add( ) 는 리스트에 값을 넣을 때 사용하는 메소드이다. 리스트 l1은 위에서 선언할 때 타입을 지정해주지 않았기 때문에 String과 int형 모두 추가가 가능한 것이다. .get( ) : ..
높이 입력받아 피라미드 모양으로 별 출력하기 피라미드 모양으로 *을 출력하려면 공백의 개수와 *의 개수를 고려해야 한다. for문으로 높이 h가 4라고 했을 때 공백과 별의 개수를 살펴보면 * -> i = 0일 때 공백 3개, 별 1개 ** -> i = 1일 때 공백 2개, 별 2개 *** -> i = 2일 때 공백 1개, 별 3개 **** -> i = 3일 때 공백 0개, 별 4개 공백 = h - i - 1개, 별 = i + 1개임을 알 수 있다. public static void main(String[] args) { Scanner sc = new Scanner(System.in); int height = sc.nextInt(); for (int i = 0; i < height; i++) { Syst..
소수 구하기에서 소수란 1과 자기 자신만을 약수로 갖는 수를 말한다. 처음 코드를 작성할 땐 for문으로 2부터 n-1 까지 나누어 떨어지는 수가 없으면 소수로 판별하도록 작성했는데 for문의 조건값을 루트 n으로 줘도 된다는 사실을 배웠다. 사실 예전에도 한번 봐서 알고 있었는데 그때보고 쓸일이 없어서 까먹고 있었다. 역시 뭐든 계속하지 않으면 까먹는다.. 그래서 코드를 수정했다. 근데 Math.sqrt는 반환값이 double형이기 때문에 사용 시 주의해야 한다. 나는 소인수분해 문제를 풀 때 배열크기에도 sqrt를 사용했는데 배열 크기는 int값으로 줘야하기에 오류가 발생했다. 그래서 (int)를 붙여 타입 캐스팅을 해줬다. 아니면 n/2로 주어도 괜찮다. Codeup 1274 소수 판별 https:..
·Spring
스프링 프레임워크와 의존성 주입 스프링이란 오픈 소스의 경량 프레임워크이다. 오픈 소스란 소스 코드가 공개되어 있는 것이고, 경량 프레임워크란 사용 시 메모리나 CPU 자원이 많이 들지 않거나 사용이 쉽고 간편한 경우를 지칭한다. 프레임워크란 확장하여 사용 가능한 코드를 말하는데 여기서 확장이란 프레임워크가 제공하는 클래스나 라이브러리를 사용하거나 상속 및 구현을 통해 프레임워크의 일부로 실행하는 것을 말한다. 의존성 주입 의존성 주입은 IoC를 디자인 패턴으로 구현하는 방법 중 하나로, 한 클래스가 의존하는 다른 클래스들을 외부에서 주입하는 것이다. 여기서 IoC란 제어의 역전을 말하며, 디자인패턴 중 하나이다. 제어의 역전이란 오브젝트 생성 및 소멸 등의 제어를 프레임워크나 컨테이너에게 넘기는 것을 ..
·Java/혼공자
10-1 예외 클래스 예외는 사용자의 잘못된 조작 또는 잘못된 코딩으로 발생하는 프로그램 오류이다. 예외 발생 시 프로그램이 바로 종료된다는 점은 에러와 비슷하지만 예외는 예외 처리를 통해 프로그램 종료 없이 정상 실행 상태를 유지할 수 있다. 예외와 예외 클래스 예외에는 일반 예외와 실행 예외 두 가지 종류가 있다. 일반 예외 컴파일러 체크 예외라고도 한다. 프로그램 실행 시 예외 발생 가능성이 높기 때문에 컴파일 과정에서 해당 예외 처리 코드가 있는지 검사한다. 없을 경우 컴파일 오류가 발생한다. 실행 예외 컴파일러 넌 체크 예외라고도 한다. 프로그램 실행 시 예측할 수 없이 발생하기 때문에 컴파일 시 해당 예외 처리 코드가 있는지 검사하지 않는다. 일반 예외와 실행 예외를 구분하는 기준은 Runti..
·Java/혼공자
09-1 중첩 클래스와 중첩 인터페이스 소개 중첩 클래스 : 클래스 내부에 선언된 클래스 중첩 클래스 사용 시 두 클래스의 멤버들을 쉽게 접근할 수 있고, 외부에는 불필요한 관계 클래스를 감춰 코드의 복잡성을 낮출 수 있다. 중첩 인터페이스 : 클래스 내부에 선언된 인터페이스 해당 클래스와 긴밀한 관계를 맺는 구현 클래스를 만들기 위해 사용한다. 중첩 클래스 중첩 클래스는 선언되는 위치에 따라 두 가지로 분류된다. 멤버 클래스 : 클래스의 멤버로 선언되는 중첩 클래스. 클래스/객체 사용 중에는 언제든 재사용이 가능하다. 로컬 클래스 : 생성자/메소드 내부에 선언되는 중첩 클래스. 메소드 실행 중에만 사용되며 메소드가 종료되면 없어진다. 인스턴스 멤버 클래스 인스턴스 멤버 클래스는 static 키워드 없이..
yeooniyeoon
개공블