얼마 전 '코드 스쿼드' 라는 교육 기관에서 출제한 숫자 야구 문제를 풀어보았다. 우리가 흔히 알고 있는 그 숫자 야구 게임이다. 단순 구현으로 생각한다면 조건문과 반복문을 적절히 사용하면 어렵지 않을 것이다. 그러나 문제엔 몇 가지 제약 사항이 있기 때문에 조금 더 신중히 생각해야 한다. 다음은 문제와 제약 사항이다. [ 문제 ] 기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다. 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이라는 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방의 수를 맞추면 승리한다. [예] 상대방의 수가 425일 떄, 123을 제시한 경우 : 1 스트라이크 / 456을 제시한 경우 : 1 스트..
1️⃣ Variable & Data Type Java 이외에도 어떤 언어를 배울 때 가장 먼저 변수와 자료형에 대해 공부할 것이다. 오늘은 변수와 자료형에 대해 공부했다. 변수 (variable) 란 값을 저장할 수 있는 메모리 공간 을 의미한다. 변수는 프로그램에 의해 값이 변동될 수 있다. 또한 하나의 값만 저장할 수 있다. 변수에는 한 가지의 자료형으로 저장 가능하다. 예를 들어 정수형은 정수형, 실수형은 실수형으로 말이다. 변수의 선언은 다음과 같다. 1. 기본 - 타입 변수 이름; 2. 초기화시 - 타입 변수 이름 = 값; ex) int num; double num2; String s; int num=10; String s="Hello World"; 2️⃣ Data Type 자료형은 프로그래밍 ..
저번에 Java Spring 을 공부할 때 @ 기호를 처음 알았다. 이것이 바로 어노테이션을 나타내는 기호이며, 이번 기회에 확실히 정리하기로 했다. 1️⃣ Java Annotation 이란? 어노테이션 (Annotation) 은 메타데이터(metadata) 라고 볼 수 있다. 메타데이터란 애플리케이션이 처리해야하는 데이터가 아니라, 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지 알려주는 정보를 말한다. 쉽게 설명하면 주석의 역할을 한다고 보면 되겠다. 어노테이션은 @AnnotationName 의 형태로 작성된다. 어노테이션은 다음과 같은 용도로 사용된다. 1. 컴파일러에게 코드의 문법 에러를 체크하도록 정보를 제공한다. 2. 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생..
About OOP OOP (Object Oriented Programming) : 객체 지향 프로그래밍 Java 는 대표적인 OOP 언어이다. 간단하게 객체 지향 프로그래밍은 객체를 만들고, 이를 조립하는 방식의 프로그래밍이다. 1️⃣ 객체란? 객체 (Object) 란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중, 자신의 속성을 가지고 있고 다른 것과 구분 가능한 것을 말한다. 우리가 살고 있는 세상은 객체로 이루어져 있다. 자동차, 휴대폰, TV 와 같이 물리적으로 존재하는 객체, 이름, 강의, 날씨 등 추상적인 객체가 존재한다. 기본적으로 객체는 '속성' 과 '동작' 을 가진다. 한 예로 '자동차' 라는 객체가 있다면, 속성으로 이름, 가격, 색깔 등이 있을 것이다. 또한 동작으로 달린다,..
막상 Java 를 다시 공부하면서 Java 가 어떤 언어인지 모른다면 공부하는 의미가 없을 것 같다. 따라서 이번엔 Java 의 역사와 Java 에 대해 간략하게 정리해보록 하겠다. 나의 첫 프로그래밍 언어는 python 이었다. 그러나 C, C+, Java 등을 배우면서 객체 지향 언어에 흥미를 느꼈고, Java 를 주력언어로 사용하기로 결정했다. 후에 백엔드 개발자로 성장하기 위해선 Java가 필수라고 생각한다. 적어도 우리나라에서는 그렇다. Java 프레임워크인 Spring 을 공부하기 위한 가장 기본적인 발판이기도 하다. 따라서 프로그래밍 입문자가 처음 언어를 선택할 때, 비교적 간단하고 쉬운 python 도 좋지만, Java 와 같은 객체 지향 언어도 좋다고 생각한다. 1️⃣ Java 란? Ja..
1️⃣ BigInteger오늘 알고리즘 문제를 풀다가 알게 된 유용한 클래스이다.말 그대로 매우 큰 수에 대한 연산을 수행할 수 있도록 도와준다. 기존 정수형 자료형인 'int' 의 범위를 보자. Data TypeRangeshort (2byte)-32,768 ~ 32,767int (4byte)-2,147,483,648 ~ 2,147,483,647long (8byte)-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 물론 큰 수에 대해서 'long' 타입을 사용하면 가능할 수 있지만, 무한대와 같은 큰 수는 어떻게 다룰까?바로 java.math 안에 내장된 'BigInteger' 타입을 사용하는 것이다. https://www.acmicpc.net/probl..
1️⃣ 개요 - Buffer Java 에서 데이터의 입출력을 수행하는 방법은 여러 가지가 있다. 그동안 나는 'Scanner' 을 주로 사용해왔다. 그러나 이 방식은 데이터의 수가 많아지면 속도가 느려진다는 단점이 있다. 이를 해결하기 위해 버퍼를 이용하는 방법이 있다. 그렇다면 '버퍼(Buffer)' 란 무엇인지 알아보자. '버퍼(Buffer)' 란 데이터를 어느 한 곳에서 다른 곳으로 전송하는 동안 일시적으로 데이터를 보관하는 메모리의 영역이다. 쉽게 말해 지금까지 사용했던 Scanner 방식은 키보드에 입력하는 순간 바로 모니터에 출력된다. 버퍼를 사용하면 일정 조건을 만족할 때 까지 버퍼에 입력을 저장한다. 이후 일정 조건(개행 문자 등) 을 만족하면 모았던 버퍼를 한꺼번에 전송한다. 버퍼의 장점..
컴백이요 중간 고사 기간도 겹치고 과제도 많아지면서 블로그 관리가 소홀했다. 그동안 앞으로의 방향성에 대해 생각도 해보고 아무튼 꽤 고민을 많이 했다. 우선 나는 현재 3학년 2학기에 재학중이며, 내년 4학년 1학기에 모든 학점을 들을 계획이다. 이후 2학기엔 독학을 하든 학원을 다니든, 온전히 코딩에 힘써보려고 한다. 벌써 취업 준비를 해야한다니 시간이 꽤 빠르게 지난 것 같다. 뭐 해놓은게 없는데 벌써 4학년이라니 억장이 와르르 무너진다. 공부 계획 1) Java 우선 주력 언어로 자바를 파볼 생각이다. 물론 처음부터, 기초부터 다시 차근 차근 깊이 있는 공부를 할 것이다. 이와 관련된 내용은 차후 블로그에 기술할 것이며, 이전과는 약간 다른 방식이 될 것이다. 블로그에 글 쓰는 것에 너무 집중하다보..