분류 전체보기 228

[BOJ] 5430 - AC

개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다. 문제 https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 난이도: 골드 5 사용언어: JAVA 풀이 우선 문제 자체는 덱을 사용하면 쉽게 풀 수 있습니다. 덱은 큐의 발전된 형태로, 양쪽 끝 모두로 입, 출력을 할 수 있는 자료구조입니다. 편의상 덱의 앞쪽 출입구를 머리 부분, 뒤쪽 출입구를 꼬리 부분이라고 하겠습니다. 덱은 다음과 같이 선언하여 사용할 수 있습니다. Deque dq_name = new ArrayDeque(); 덱의 주요 함수는 다..

[소프트웨어 설계] TDD

TDD는 Test Driven Development의 약자로, 직역하면 테스트 주도 개발입니다. 소프트웨어 개발 방법론 중 하나로, 테스트 케이스를 작성하고, 이 테스트 케이스를 통과하는 코드를 개발하는 방식입니다. 일반적인 개발 프로세스는 설계 -> 개발 -> 테스트의 형태로 이루어집니다. 이 경우 테스트 중에 오류가 발생했을 때, 전체 프로그램을 확인해야 하며, 설계 변경 등의 이유로 작은 기능을 수정하더라도 전체 코드가 잘 작동하는지 확인해야 합니다. 당연히 유지보수에도 어려움이 있겠죠. 이를 개선하고자 작은 기능부터 테스트를 거치면서 개발을 진행하자는 방식이 바로 TDD입니다. 이 TDD의 개발순서, 장장점, 단점에 대해 하나씩 알아보겠습니다. TDD 개발 순서 1. 설계 단계에서 개발 목적을 정..

[알고리즘] 완전탐색

1. 완전 탐색이란? 완전 탐색은 컴퓨터의 계산 능력을 이용하여 가능한 모든 경우의 수를 테스트해봄으로써 답을 찾는 방법을 의미합니다. 예를 들어 친구의 생일을 맞추는 프로그램을 짠다면, 친구의 생일에 대해 아무런 정보가 없다는 가정하에 1월 1일부터 12월 31일까지 모든 날짜가 같은 확률로 생일일 수 있습니다. 이런 문제는 결국 1월 1일부터 12월 31일까지 모든 경우의 수를 테스트해보는 것이 가장 좋다는 것이죠. 무식하게 처음부터 끝까지 모두 테스트해보기 때문에 알고리즘도 이해하기 쉽고, 결괏값을 정확하게 얻어내기도 쉽습니다. 하지만 모든 경우의 수를 탐색하는 완전 탐색의 특성상, 답이 될 수 있는 경우의 수가 너무 많은 경우에는 사용하기 힘듭니다. 특히 코딩 테스트나 백준 문제에서 무턱대고 완전..

[BOJ] 3078 - 좋은 친구

개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다. 문제 https://www.acmicpc.net/problem/3078 3078번: 좋은 친구 첫째 줄에 N과 K가 주어진다. (3 ≤ N ≤ 300,000, 1 ≤ K ≤ N) 다음 N개 줄에는 상근이네 반 학생의 이름이 성적순으로 주어진다. 이름은 알파벳 대문자로 이루어져 있고, 2글자 ~ 20글자이다. www.acmicpc.net 난이도: 골드 3 사용언어: JAVA 풀이 문제를 해결하는 여러 방법이 있겠지만, 저는 큐를 이용하여 문제를 풀었습니다. 문제 해결 방법은 다음과 같습니다. 1. 한 명씩 입력을 받으며 큐에 삽입한다. 2. 등수의 차이가 K를 벗어나면 큐에서 삭제한다. (큐 내부에는 등수가 K 이내인 친구만 존재한다) 3. 입력을 ..

[BOJ] 2116 - 주사위 쌓기

개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다. 문제 https://www.acmicpc.net/problem/2116 2116번: 주사위 쌓기 첫줄에는 주사위의 개수가 입력된다. 그 다음 줄부터는 한 줄에 하나씩 주사위의 종류가 1번 주사위부터 주사위 번호 순서대로 입력된다. 주사위의 종류는 각 면에 적혀진 숫자가 그림1에 있는 www.acmicpc.net 난이도: 골드 4 사용언어: JAVA 풀이 주사위를 이용한 구현문제이자 모든 경우의 수를 테스트 해보아야하는 브루트포스 문제입니다. 구현 로직은 다음과 같습니다. 1. 가장 아랫쪽 주사위는 마음대로 둘 수 있으므로 6면을 모두 테스트한다. 2. 두 번째 주사위부터는 아랫쪽 주사위의 윗면과 현재 주사위의 아랫면을 같은 수로 맞춰준다. 3. 아..

[데이터베이스] View

View란? View는 데이터베이스에서 접근이 허용된 데이터만 제한적으로 보여주기 위해 하나 이상의 데이터로부터 유도된 가상 테이블입니다. 가상 테이블이라는 말은 저장 장치에 물리적으로 저장되지는 않지만 사용자 입장에서 데이터를 조회하고 수정할 수 있는 논리적인 테이블이라는 뜻입니다. 즉 자신에게 접근이 허용된 데이터에 대해서 삽입, 수정, 삭제, 검색이 가능하기 때문에 일반적인 데이터베이스와 유사하게 이용할 수 있다는 뜻입니다. View를 왜 사용하죠? Student라는 학생 정보를 저장하고 있는 테이블이 있다고 가정하겠습니다. 이 Student 테이블에는 이름, 주민등록번호, 학번, 성적, 성별 등의 정보를 담고있습니다. 어떤 교수님 한 분이 이 학생에 대한 정보를 알고 싶어서 검색을 한다면, 이름,..

[JAVA] Overloading과 Overriding의 차이

자바에서 자주 나오는 개념으로 Overloading과 Overriding이 있습니다. 이름이 비슷해서 혼동하기 쉽지만 전혀 다른 뜻을 가지고 있기 때문에 한 번 정리를 하고 넘어가고자 합니다. Overloading Overloading은 한 클래스 내에서 둘 이상의 메서드가 같은 이름을 가지면서 인자의 수나 자료형이 다른 경우를 말합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public int add(int a, int b) { return a + b; } // 1번 public int add(int a, int b, int c) { return a + b + c; } // 2번 public int add(char a, char b) { return a + b; } // 3번..

[JAVA] Scanner vs BufferedReader & System.out vs BufferedWriter

Java에는 입출력을 실행하는 여러 방법이 있습니다. 입력의 경우, 가장 유명한 두 방법은 다음과 같습니다. 1 2 3 4 5 6 7 // 1. Scanner Scanner sc = new Scanner(System.in); sc.next(); // 2. BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); br.readLine(); Colored by Color Scripter cs 출력의 경우에는 다음과 같습니다. 1 2 3 4 5 6 7 // 1. System.out System.out.println("hi"); // 2. BufferedWriter BufferedWriter bw = new B..

[JAVA] Static? 그거 왜 붙이는건데?

Static. 자바를 이용하여 개발을 하다 보면 참 많이 마주치는 키워드입니다. 당장 main 함수를 선언할 때만 보더라도 public static void main(String[] args){ ... } 요렇게 static이 떡하니 붙어있죠. 그렇다면 static이 왜 붙어있는지, 도대체 무엇인지, 어떻게 쓰이는 것인지 알아보도록 하겠습니다. Static이란? Static은 '정적인, 고정된'이라는 뜻을 가지고 있습니다. 이러한 이름을 가지는 이유는 바로 static이 앞에 붙는 변수나 메서드는 어떤 객체에 소속되는 것이 아닌, 클래스에 고정되어 있는 변수나 메서드이기 때문입니다. Static의 특징을 먼저 살펴보겠습니다. 1. 메모리에 고정적으로 할당된다. 2. 객체 생성 없이 사용할 수 있다. 3...

[JAVA] JVM, JRE, JDK의 차이점이 뭘까?

JAVA를 사용해 개발을 진행하다 보면 JDK, JRE, JVM과 같은 단어들을 쉽게 접할 수 있습니다. 이 셋은 자바 프로그램의 개발과 실행을 위해 필요한 컴포넌트로, 오늘은 이 용어들의 정의에 대해 알아보도록 하겠습니다. 1. JVM (Java Virtual Machine) 이름 그대로 자바 코드를 실행하기 위한 가상 머신이라고 생각하면 편합니다. 기능을 간단하게 언급하자면, JVM은 아래의 역할들을 수행합니다. 1. 자바 코드로부터 컴파일되어 생성된 자바 바이트 코드를 실행합니다. JVM 덕분에 어떤 운영체제를 사용하든지 상관없이 자바 코드를 실행시킬 수 있습니다. 2. Garbage Collection을 통한 메모리 관리를 수행합니다. JVM에 대해서는 아래의 글에 더 자세히 작성되어 있습니다. ..