전체 글

Problem Solving/Study

[Java] 프로그래머스. Study 3주차(BFS, DFS)

1. 타겟 넘버 https://school.programmers.co.kr/learn/courses/30/lessons/43165 코드 class Solution { int[] numbers; int target; int answer; void DFS(int index, int sum) { if(index == numbers.length) { if(sum == target) answer++; return; } DFS(index+1, sum+numbers[index]); DFS(index+1, sum-numbers[index]); } public int solution(int[] numbers, int target) { this.answer = 0; this.numbers = numbers; this.ta..

Reading/자바의 정석

Chapter 9. java.lang패키지와 유용한 클래스

1. java.lang 패키지 java.lang패키지는 자바 프로그래밍에 가장 기본이 되는 클래스들을 포함하고 있다. 그렇기 때문에 java.lang패키지의 클래스들은 import문 없이도 사용할 수 있게 되어 있다. 자주 사용되는 클래스 몇 가지만 학습해보자. 1-1. Object 클래스 Object 클래스는 모든 클래스의 최상위클래스이기 때문에 Object 클래스의 멤버들은 모든 클래스에서 바로 사용이 가능하다. equals(Object obj) 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean값으로 반환한다. class EqualsEx { public static void main(String[] args) { Value v1 = new Value(10); Value v2 = n..

CS/Data Structure

스택(Stack)

1. 스택이란? 스택이란 가장 뒤에 들어온 데이터가 가장 먼저 나가는 구조의 자료구조다. 스택은 맨 위의 원소만 접근 가능한 것이 특징이며 맨 위의 원소를 스택 탑(top)이라고 한다. 새 원소를 삽입할 때는 스택 탑 바로 윗자리에 원소를 저장한 후 새 원소가 스택 탑이 된다. 그리고 원소를 삭제할 때는 무조건 탑에 있는 원소를 삭제한 후 바로 아래 원소가 스택 탑이 된다. 2. 배열 스택의 구현 public interface StackInterface { public void push(E newItem); public E pop(); public E top(); public boolean isEmpty(); public void popAll(); } public class ArrayStack imple..

Reading/스프링 입문을 위한 자바 객체지향의 원리와 이해

7. 스프링 삼각형과 설정 정보_IoC/DI

디자인 패턴은 읽어도 아직은 이해가 안 되는 부분이 많고 마침 오늘 스프링 삼각형을 배웠기에 건너 뛰고 7장을 먼저 읽기로 결정했다😂 1. IoC/DI - 제어의 역전/의존성 주입 1-1. 프로그래밍에서 의존성이란? 의사 코드 운전자가 자동차를 생산한다. 자동차는 내부적으로 타이어를 생산한다. 자바로 표현 new Car(); Car 객체 생성자에서 new Tire(); 의존성을 단순하게 정의하면 다음과 같다. 의존성은 new다. new를 실행하는 Car와 Tire 사이에서 Car가 Tire에 의존한다. 먼저 스프링을 적용하지 않은 기존 방식으로 자바 코드를 작성한 예제다. public interface Tire { String getBrand(); } public class KoreaTire implem..

CodeStates_BE_44/TIL

[Spring] Spring Framework

1. Framework 1-1. Framework란? “소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것” 이라고 정의하고 있지만, 이 문장만으로 소프트웨어 관점에서 Framework의 의미를 이해하기는 쉽지 않다. 하나의 애플리케이션을 건물이라고 가정한다면, Frame은 건물의 구조라고 생각하면 된다. 즉, 소프트웨어 관점에서의 Framework는 어떤 애플리케이션을 만들기 위한 틀 혹은 구조를 제공하는 것이다. 그렇다면 Framework를 사용했을 때 장점과 단점은 무엇일까? 장점 효율적으로 코드를 작성할 수 있다. 서로 다른 애플리케이션 간의 통신이나, 데이터를 데이터 저장소에 저장하는 등의 다양한 기능들은 Framework에서 라..

CS/Algorithm

그리디(Greedy) 알고리즘

1. 그리디 알고리즘이란? 그리디 알고리즘은 현재 상황에서 가장 좋은 것만 선택하고 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않는다. 그리디 알고리즘은 문제 출제의 폭이 매우 넓기 때문에 단순 암기를 통해서는 모든 문제에 대처하기 어렵다. 기준에 따라 좋은 것을 선택하는 알고리즘이므로 문제에서 “가장 큰 순서대로”, “가장 작은 순서대로”와 같은 기준을 알게 모르게 제시해준다. 또한 대체로 정렬 알고리즘과 짝을 이뤄 출제된다. 2. 예제 💡 모든 문제는 나동빈 저자의 “이것이 코딩테스트다”에 수록되어 있으며 작성한 코드는 오류가 있을 수 있음을 미리 밝힙니다. 2-1. 큰 수의 법칙 문제 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 법칙이다. 단, 배열..

Problem Solving

[Java] 백준 1260. DFS와 BFS

문제 그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다. 입력 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다. 출력 첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다. V부터 방문된 점을 순서대로 출력하면 된다. ..

Reading/스프링 입문을 위한 자바 객체지향의 원리와 이해

5. 객체 지향 설계 5원칙 - SOLID

개요 요리로 비유해서 객체 지향의 4대 특성이 주방기구라면 주방기구를 올바르게 사용하는 방법을 SOLID 라고 할 수 있다. 객체 지향 설계의 5원칙, 바로 SOLID는 아래 5가지 원칙의 앞 머리 알파벳을 따서 부르는 이름이다. SRP(Single Responsibility Principle): 단일 책임 원칙 OCP(Open Closed Principle): 개방 폐쇄 원칙 LSP(Liskov Substitution Principle): 리스코프 치환 원칙 ISP(Interface Segregation Principle): 인터페이스 분리 원칙 DIP(Dependency Inversion Principle): 의존 역전 원칙 이 원칙들은 응집도는 높이고 결합도는 낮추라는 고전 원칙을 객체 지향의 관점..

CodeStates_BE_44/TIL

[DB] 데이터베이스 설계

1. 관계형 데이터베이스 구조화된 데이터는 하나의 테이블로 표현할 수 있습니다. 사전에 정의된 테이블을 relation이라고도 부르기 때문에 테이블을 사용하는 데이터베이스를 관계형 데이터베이스(Relational database)라고 합니다. 데이터(data): 각 항목에 저장되는 값 테이블(table 또는 relation): 사전에 정의된 열의 데이터 타입대로 작성된 데이터가 행으로 축적된다. 칼럼(column 또는 field): 테이블의 한 열 레코드(record 또는 tuple): 테이블의 한 행에 저장된 데이터 키(key): 테이블의 각 레코드를 구분할 수 있는 값으로 기본키(primary key)와 외래키(foreign key)가 있다. 2. 관계 종류 1:1 관계 하나의 레코드가 다른 테이블의..