분류 전체보기
문제 접근 이 문제는 모든 케이스를 확인해서 결과를 도출해야하는 완전 탐색 문제이다. 테니스 탁구 수영 석환 40 10 10 영재 20 5 0 인용 30 30 30 정현 70 0 70 준모 100 100 100 재귀함수를 통해 DFS로 최대값을 비교해가며 마지막 케이스까지 검증 후 결과를 리턴한다. 코드 import java.lang.Math; class Solution { int maxValue = Integer.MIN_VALUE; int sum = 0; boolean[] visited; public int solution(int[][] ability) { visited = new boolean[ability.length]; process(ability, 0); return maxValue; } pri..
문제 접근 이 문제는 외톨이 알파벳을 찾는 기준을 생각하는 것이 핵심이다. 문자 배열을 순회하며 이전에 한번 나왔던 알파벳이 다른 알파벳 뒤에 한번 더 나올 때를 체크해서 외톨이 알파벳으로 등록해준다. 정리하자면 알파벳이 이전에 나온 적이 있다. 직전의 알파벳과 다른 알파벳이다. 외톨이 알파벳으로 등록된 적이 없는 알파벳이다. 이 3가지 요건을 충족하는 경우에 외톨이 알파벳 대상이 된다. 코드 import java.util.*; class Solution { public String solution(String input_string) { String[] inputArr = input_string.split(""); String prevAlp = inputArr[0]; // 외톨이 알파벳 검증 Set S..
▶ 배열이란? 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것 여기서 중요한 것은 같은 타입이어야 한다는 것이다. 예를 들면, int 배열을 선언하려면 다음과 같이 사용할 수 있다. int[] score = new int[5]; // 5개의 int 값을 저장할 수 있는 배열 생성 위의 코드가 실행되면 아래의 그림과 같이 배열이 생성된다. (0x100 값은 실제 객체의 메모리 주소가 아닌 예시로 적은 주소 값) 배열의 선언과 생성과정을 단계별로 보자. 1. int[] score; int형 배열 참조변수 score를 선언한다. 데이터를 저장할 수 있는 공간은 아직 없다. 2. score = new int[5]; 2-1. 연산자 'new'에 의해서 메모리의 빈 공간에 5개의 int형 데이터를 저장할..
레퍼런스 문서에서 이 파트는 스프링 프레임워크에 필수인 모든 기술을 다룬다. 그 중에서도 핵심 기술은 IoC (Inversion of Control) 컨테이너이다. 스프링 프레임워크의 IoC 컨테이너는 스프링의 AOP (Aspect-Oriented Programming: 관점 지향 프로그래밍) 기술의 포괄적인 범위가 뒤따른다. 스프링 프레임워크는 개념적으로 이해하기 쉽고 자바 엔터프라이즈 프로그래밍의 AOP 요구사항 sweet spot의 80%를 성공적으로 해결하는 자체적 AOP 프레임워크를 갖고 있다. 스프링에는 AspectJ (현재 자바 엔터프라이즈 환경에서 가장 풍부한 기능과 성숙한 AOP 구현)가 통합되어 제공된다. 1. The IoC Container 이 챕터는 스프링의 IoC 컨테이너를 다룬다..
▶ 조건문 (if, switch) 1. if문 만일(if) 조건식이 참(true)이면 괄호 { } 안의 문장들을 수행한다. if (조건식) { // 조건식이 참일 때 수행될 문장들을 적는다. } 2. 블럭 괄호 { }를 이용해 여러 문장을 하나의 단위로 묶을 수 있다. 이를 블럭(block) 이라 한다. 블럭 내의 문장들은 탭으로 들여쓰기를 해서 블럭 안에 있는 문장이라는 것을 알기 쉽게 해야한다. 3. if-else문 'else'의 뜻이 '그 밖의 다른'이므로 조건식의 결과가 참이 아닐 때 else 블럭의 문장을 수행한다. 4. if-else if문 처리해야할 경우의 수가 세가지 이상일 땐, else if로 조건식을 추가해서 사용한다. 조건식이 참인 경우가 하나도 없을 때는 마지막에 else블럭을 통해..
▶ 들어가기 전에 프로그래밍에서 연산자는 필수적인 요소 중 하나이다. 그러므로 이번 포스팅에서 연산자에 대해 개념을 정리하고 실수하기 쉬운 부분을 정리하고자 한다. ▶ 연산자란? 연산자(Operator)는 '연산을 수행하는 기호'를 말한다. 자바에서 연산자는 사칙연산(+, -, *, /)을 비롯해서 다양한 연산자들을 제공한다. 연산자가 연산을 수행할 때 대상이 되는 연산 대상을 피연산자(Operand)라고 한다. 피연산자에는 변수, 상수, 리터럴, 수식 등이 있다. 연산자는 피연산자로 연산을 수행하고 나면 항상 결과값을 반환한다. 1. 연산자의 종류 종류 연산자 설명 산술 연산자 + - * / % 사칙 연산과 나머지 연산 비교 연산자 > = 비교 > 논리 > 대입. 대입은 마지막에 수행된다. 단항(1) ..
▶ 들어가기 전에 우리가 프로그래밍을 할 때 변수는 필수적으로 사용되는 요소이다. 하지만 변수에 대해 자세하게 알지 못하고 사용하게 되면 메모리 누수, 스택 오버플로우 문제로 이어질 수 있는 위험도 존재한다. 그래서 변수에 대한 정리를 해야겠다는 생각이 들어 포스팅을 하게 되었다. ▶ 변수란? 변수란 다음과 같이 정의된다. 단 하나의 값을 저장할 수 있는 메모리 공간 하나의 변수에는 하나의 값만 저장할 수 있으며, 새로운 값 저장시 기존 값은 사라진다. 변수는 선언과 동시에 초기화(Initialization) 해야 한다.메모리는 공유자원이므로 전에 다른 프로그램에 의해 저장된 쓰레기 값(Garbage Value)이 남아있을 수 있기 때문이다. 변수의 명명규칙 "변수의 이름" 처럼 프로그래밍에서 사용하는 ..
▶ 들어가기 전에 JVM에 대한 포스팅에서 언급된 JIT 컴파일러는 JVM 내에서 동작하는 인터프리터의 느린 속도를 개선해주는 역할을 한다고 언급되었는데, 어떻게 속도를 빠르게 하는지 좀 더 자세히 공부해보고자 포스팅을 하게 되었다. ▶ 왜 속도가 개선되는가? 운영체제 시스템은 0과 1로만으로 구성된 바이너리 코드로 된 명령만을 실행할 수 있다. 보통 C, C++, Forttarn과 같은 언어는 컴파일형 언어라 한 번에 모든 코드를 읽고 해석하여 바이너리 코드로 변환한다. Perl, PHP, Python, Java는 한 번에 한 줄의 코드만 읽고 해석하는 인터프리터 언어라고 한다. 그러므로 컴파일형 언어에 비해 느리다는 단점이 있다. Java에서는 이에 절충안으로 JIT 컴파일러를 사용한다. JIT 컴파..
들어가기 전에 Java로 프로그래밍을 함에 있어서 좋은 개발자가 되기 위해서는 고수준 영역뿐만 아니라 메모리가 관리되는 방식, 클래스 파일이 생성되는 방식, JVM의 내부 구조, 동작 원리 등을 알고 있어야 한다고 생각이 들었다. 그래서 오늘은 JVM에 대해서 공부해보겠다. JVM이란? JVM은 Java Virtual Machine의 약자이다. 말 그대로 자바를 실행하기 위한 가상 기계이다. 자바로 작성된 애플리케이션은 바이트 코드로 컴파일되어 JVM에서 이를 해석(interpret)하여 실행한다. 위와 같은 특성 때문에 자바 애플리케이션은 운영체제 및 플랫폼에 독립적이지만, JVM은 종속적이다. 그래서 윈도우 운영체제면 윈도우용 JVM, 리눅스 운영체제면 리눅스용 JVM을 이용한다. JVM 특징 스택 ..