전체 글

I'm still working on it. We must be better.
문제 출처 : https://www.acmicpc.net/problem/1450 소요 시간 : 풀이(1h) 문제 시도 투 포인터의 최종 문제로 난이도가 상당했다. 일단 일반적인 접근법인 start, end의 두 기준으로 투 포인터를 구현했는데, 풀다보니 해당 문제는 경우의 수까지 고려해야 하는 문제라는 걸 알게 되었고, 결국 다른 사람의 풀이를 참고했다. 풀이 해당 문제의 접근법은 다음과 같다. N을 반으로 나누어 start ~ N/2, N/2 ~ end 범위에서 각각 완전탐색을 하여 만들 수 있는(C 이하) 모든 무게를 찾아 각각 배열(aSum, bSum)에 담는다. aSum, bSum 중 하나를 기준으로 이진탐색을 수행해야 하기에 기준이 아닌 다른 배열을 오름차순으로 정렬한다. aSum 각각의 모든 ..
체크 예외(Checked Exception)와 언체크 예외(Unchecked Exception)의 주요 차이는 예외 처리의 강제 여부에 있습니다. 체크 예외는 RuntimeException 클래스를 상속하지 않은 예외로, 개발자가 이를 처리하도록 강제합니다. 예시로는 FileNotFoundException, RuntimeException 등이 있습니다. 장점 컴파일 시간에 강제로 예외 처리를 유도하여 안정성을 높입니다. 예외 처리를 강제함으로써 코드의 가독성과 유지보수성이 향상될 수 있습니다. 단점 너무 많은 예외 처리 코드가 필요할 수 있어 코드의 복잡성이 증가할 수 있습니다. 예외 처리를 강제함으로써 개발자의 부담이 커질 수 있습니다. 체크 예외가 발생할 수 있는 코드는 try-catch 블록으로 감..
문제 출처 : https://www.acmicpc.net/problem/1806 소요 시간 : 시도(40m) + 풀이(30m) 문제 시도 문제를 제대로 이해하지 않고 '그냥 투 포인터 쓰면 되겠지' 하면서 정렬하기 시작하면서 꼬이기 시작했고, 결국 40분을 온전히 낭비하고 장렬히 실패했다. 아래는 문제가 뭔지도 모르고 바보 같이 작성한 코드다. // n (수열 요소 범위) : 1 ~ 10,000 // N (수열 길이) : 10 ~ 100,000 // S (목표 합) : 1 ~ 100,000,000 import java.io.*; import java.util.*; class Main { public static void main(String[] args) throws IOException { Buffer..
"인터페이스(Interface)와 추상 클래스(Abstract class)의 차이 및 존재 이유에 대해 설명해주세요" 추상클래스는 없거나 하나 이상의 추상메소드를 가지고 있는 클래스로, 추상메소드는 내용이 구현되지 않은 abstract로 정의된 메소드를 의미합니다. 클래스 안에 메소드가 단 한개라도 존재한다면 그 클래스는 반드시 abstract로 정의되어야 합니다. 어떤 클래스가 추상 클래스를 상속받을 때는 extends를 씁니다. 인터페이스는 모든 메소드를 추상 메소드의 형태로 작성하는 것으로, 이를 상속하는 클래스는 해당 인터페이스의 모든 메소드를 반드시 구현해야 합니다. (자바 8에서는 default 키워드를 이용해서 일반 메소드의 구현도 가능합니다.) 또한 인터페이스 내 모든 변수들은 static..
클래스, 객체, 그리고 인스턴스 클래스(Class) 객체를 만들어내기 위한 설계도 혹은 틀로서 연관된 변수와 메서드의 집합을 포함합니다. 클래스는 개념적인 틀로, 실체화되기 전에는 메모리에 존재하지 않습니다. 예를 들어, '자동차' 클래스는 자동차의 공통된 동작을 정의합니다. 객체(Object) 소프트웨어 세계에 구현할 대상으로, 클래스에 선언된 모양 그대로 생성된 실체입니다. 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 가지며, OOP에서 클래스의 타입으로 선언되었을 때 '객체'라고 부르며 '클래스의 인스턴스(instance)'로도 불립니다. '자동차' 클래스로부터 생성된 실제 자동차가 객체입니다. 인스턴스(Instance) 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체로, 객체를 소프트..
SOLID는 객체지향 프로그래밍의 다섯 가지 설계 원칙을 나타내며, 그 내용은 다음과 같습니다. 1. SRP (Single Responsibility Principle, 단일 책임 원칙) 클래스는 단 하나의 책임만을 가져야 합니다.즉, 하나의 클래스는 하나의 기능에만 집중해야 합니다. 단일 책임 원칙을 제대로 지키면 변경이 필요할 때 수정할 대상이 명확해집니다. 이러한 단일 책임 원칙의 장점은 시스템이 커질수록 극대화되는데, 시스템 규모의 확장으로 서로 많은 의존성을 갖는 상황에서 변경 요청이 오면 단 1가지만 수정하면 되기 때문입니다. 2. OCP (Open-Closed Principle, 개방-폐쇄 원칙) 확장에는 열려있고 수정에는 닫혀있어야 합니다. 즉, 기존 코드를 수정하지 않고 새 기능을 추가할..
객체지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어 개발에 널리 쓰이는 프로그래밍 패러다임으로, 가장 큰 장점은 프로그램을 보다 유연하고 변경을 용이하게 만들 수 있다는 점입니다. 이러한 OOP는 추상화, 캡슐화, 상속, 그리고 다형성 등 여러 주요한 특징들에 기반합니다 1. 추상화 Abstraction - 정의 : 객체의 공통된 속성과 기능을 추출하여 정의하는 것. 추상화는 문제에 알맞게 클래스를 모델링하고, 가장 연관성 있는 상속 수준에서 작업함으로써 복잡한 현실을 단순화하고, 특정한 세부사항보다 객체의 필수적인 질에 집중합니다. 2. 캡슐화 Encapsulation - 정의 : 서로 연관된 속성과 기능들을 하나의 캡슐(capsule)로 만들어 데이터를 외부로..
자바의 접근 제어자(access modifire)는 클래스, 메서드, 그리고 변수들의 접근성을 정하는 키워드로, public, private, protected, 그리고 default로 구성됩니다. 자바 개발자는 이 접근 제어자들을 통해 클래스, 인터페이스, 메서드, 데이터와 변수들에 대해 가시성과 접근성을 통제할 수 있습니다. 다음은 접근 제어자 각각에 대한 간결한 도표입니다. 접근 제어자 패키지 외 다른 패키지의 하위 클래스 패키지 내 클래스 내 public O O O O protected X O O O default X X O O private X X X O 위 도표를 정리하면 다음과 같습니다. private : 동일 클래스 내에서만 접근 가능 default : 동일 패키지 내에서만 접근 가능 pr..
String은 자바에서 가장 흔히 쓰이는 클래스 중 하나이고, StringBuilder와 StringBuffer는 String을 다룰 수 있는 좋은 도구입니다. 이 게시글은 String과 StringBuilder, 그리고 StringBuffer 간의 차이를 정리하기 위해 작성되었습니다. String 1. 자바에서 String 클래스는 문자 string을 나타내며, 두 가지 방식으로 이를 인스턴스화할 수 있습니다. String str = "ABC"; // or String str = new String("ABC"); 2. Java에서 String은 불변 객체로 멀티 스레드 환경에 적합합니다. 데이터 비일관성에 대한 걱정이 없기 때문에 함수 간에도 공유할 수 있습니다. 3. 큰따옴표(")로 String을 정..
자바 코드(JAVA Code) 실행 과정 자바 코드의 실행 과정은 다음과 같습니다. 개발자가 자바 소스코드 파일(.java) 파일을 생성한다. 이를 자바 컴파일러(javac)로 빌드하여 바이트 코드(.class)로 컴파일한다. .class 파일을 JVM의 클래스 로더(Class Loader)에게 전달한다. 클래스 로더는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data Area) 인 JVM의 메모리에 올린다. 실행엔진(Execution Engine)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와 실행한다. JVM 동작원리 및 기본개념 클래스 로더 (Class Loader) ● 특징 계층 구조 클래스 로더는 여러 클래스 로더 간 부모-자..
G+
IT 이모저모