[Java] BOJ 1550: Integer.parseInt()
·
Engineering Notes/Java & Spring
BufferedReader를 쓰면서 문자열을 숫자 값으로 전환하는 일이 많았다. 그래서 Integer.parseInt()가 자연히 몸에 배어있었는데, 이게 특정 진법으로 해석해 숫자 값을 뱉는 친구라는 건 오늘에서야 알았다. (지능 이슈) 변명이지만 지금까지 진법 자체를 다룰 일이 딱히 없었기도 하고, 아무튼 단순히 Int로 파싱 하는 거라 생각했는데, 아래와 같이 기수를 입력하면 해당 진법으로 해석해 값을 뱉어낸다.Integer.parseInt(Stirng, base)// 2진법Integer.parseInt("1010", 2); // -> 10 반환// 8진법Integer.parseInt("12", 8); // -> 10 반환// 16진법Integer.parseInt("A", 16); // -> 10 ..
[Java] BOJ 13909: 창문 닫기와 힙 메모리 한도
·
Engineering Notes/Java & Spring
요즘 변수명을 의미 있게 작성하려고 노력하는 중이다. 물론 알고리즘을 풀 때는 편의상 내가 알 수 있을 정도로만 작명한다. 동시에 메서드는 최대한 빼서 구현하는 편인데, 특별한 이유는 없고 메서드를 만드는 것에 익숙해지고 싶어서다.창문 닫기 문제는 9단계에 위치했지만 앞선 단계들보다 쉽다. 그래서 크게 생각할 점 없이 코드를 짤 수 있었다.// https://www.acmicpc.net/problem/13909import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Problem13909 { public static void main(String[] args) throws ..
[Java] BOJ 11723: 비트마스크 (BitMask)
·
Engineering Notes/Java & Spring
들어가기에 앞서 비트마스크란 컴퓨터의 비트를 이용해, 이진 데이터로 상태를 저장하고 처리하는 기법이다. 작은 메모리 공간으로 다양한 연산을 수행할 수 있기에 효율적인 알고리즘을 설계할 수 있다. 주로 플래그 설정, 집합의 요소 추적, 특정 비트에 대한 연산 등에 사용된다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.HashSet;import java.util.StringTokenizer;public class Problem11723 { public static void main(String[] args) throws IOException { ..
[Java] BOJ 1654: 이진 탐색, 이분 탐색 (Binary Search)
·
Engineering Notes/Java & Spring
들어가기에 앞서  이진 탐색이나 이분 탐색이나 영어로는 Binary Search로 같은 말이다.  결국 데이터를 반으로 나누어가며 목푯값을 찾는 알고리즘이다. 여기서 말하는 데이터는 정렬된 배열을 말한다.  정렬된 배열로 진행해야 하는 이유는 이진 탐색 원리에 있다.  우선 시작점과 끝점을 가지고 중간점을 만든다. 중간값을 기준으로 원하는 값과 비교하여 탐색할 구간을 좁혀나간다. 원하는 값이 중간값보다 작으면 왼쪽 절반을 탐색하고, 더 크면 오른쪽 절반을 탐색한다.  위 작업을 반복하다가 원하는 값을 찾거나 구간이 사라지면 종료한다. 이진 탐색을 왜 사용할까?  배열을 처음부터 끝까지 차례대로 탐색하는 방법을 선형 탐색이라고 한다. 배열의 길이가 N이라고 할 때, 최악의 경우 시간복잡도는 O(N)이다. ..
[Java] OCP (Open-Closed Principle) / 개방-폐쇄 원칙
·
Engineering Notes/Java & Spring
좋은 객체 지향 설계 원칙에는 여러 가지가 있지만, 그중 하나가 바로 OCP다.Open for extentionClosed for modification 즉, 기존 코드는 수정하지 않으면서 새로운 기능을 위해 확장할 수 있어야 한다. *기존 코드: 시스템의 핵심 동작 코드*확장된 부분: 요구사항 추가 구현Strategy Pattern  전략 패턴이란 다양한 객체 지향 디자인 패턴 중 하나로, 알고리즘을 클래스로 캡슐화하여 동적으로 변경할 수 있게 해주는 패턴이다. 이 패턴은 알고리즘을 사용하는 코드와 알고리즘 자체를 분리하여, 새로 추가된 알고리즘이 기존 코드에 영향을 주지 않도록 한다.[전략 패턴의 기본 구조]클라이언트 코드 (Context)전략 인터페이스 (Strategy)구체적인 전략 (Concre..
[Java] 인터페이스의 다중 구현
·
Engineering Notes/Java & Spring
자바에서 다중 상속이 안 되는 이유가 무엇인가?특정 클래스를 상속받는다고 할 때, 자식 클래스에서 오버라이딩 하지 않은 부모 클래스의 메서드가 있다고 치자. 그런데 하필이면 A라는 부모에게도 m이라는 메서드가 있고, B라는 부모에게도 m이라는 메서드가 있다. 이 상황에서 m이라는 메서드를 호출할 때, A 클래스와 B 클래스 중 어느 부모 클래스의 메서드를 호출해야 하는가? 명확한 답이 없을 뿐더러 심각한 문제를 발생시킬 여지가 있다. 때문에, 자바에서는 다이아몬드 문제를 막고자 클래스의 다중 상속을 금지시킨다. 관련 게시물: 다이아몬드 문제 인터페이스는 다중 구현을 허용한다. 그 이유는 무엇인가? 인터페이스는 인터페이스를 구현하는 곳에서 해당 기능을 모두 구현해야만 한다. 각기 다른 인터페이스가 같은 이..
[Java] abstract, interface / 추상 클래스와 인터페이스
·
Engineering Notes/Java & Spring
public class Animal { public void sound() { System.out.println(" "); }}public static void main(String[] args) { Animal[] animals = {new Cat(), new Cow(), new Dog(), new Duck()}; for (Animal animal : animals) { soundAnimal(animal); }}private static void soundAnimal(Animal animal) { System.out.println("==== 사운드 호출 ===="); animal.sound(); System.out.println("==..
[Java] 객체 지향 프로그램과 다형성
·
Engineering Notes/Java & Spring
자바는 객체 지향 언어다! 객체 지향 프로그램의 대표적인 특징은 아래와 같다.캡슐화상속다형성▶ 프로그래밍에서 다형성은 한 객체가 여러 타입의 객체로 취급될 수 있는 능력을 말한다. 다형성 이해를 위한 핵심 이론 두 가지은 아래와 같다.다형적 참조메서드 오버라이딩▶ 다형적 참조는 말 그대로 다양한 형태로 참조될 수 있음을 말한다. (상속 관계 주의: 부모 클래스의 객체를 자식 클래스의 참조 변수에 할당하는 것은 타입 불일치로 간주된다.)상속 예제public class Parent { public void parentMethod() { System.out.println("parent method"); }}public class Child extends Parent { public..