_

Always be tactful

전체 글 90

[Java] BOJ 13909: 창문 닫기와 힙 메모리 한도

요즘 변수명을 의미 있게 작성하려고 노력하는 중이다. 물론 알고리즘을 풀 때는 편의상 내가 알 수 있을 정도로만 작명한다. 동시에 메서드는 최대한 빼서 구현하는 편인데, 특별한 이유는 없고 메서드를 만드는 것에 익숙해지고 싶어서다.창문 닫기 문제는 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] MVC 패턴: 로또 애플리케이션 만들기 1편

백엔드 개발자를 희망한다면서 지금까지 잘못된 방법으로 공부하고 있었던 것 같다. 알고리즘이나 조금 건드리고, 인프런 강의를 챙겨 들으며 문법을 배우는 것만으로도 충분히 잘하고 있다고 생각했다.  현실은 JONNA 부족하다. 한 블록에 모든 내용을 담다가, 메서드로 분리하는 것을 적용해 보기까지도 엄청 오랜 기간이 걸렸다. 일부러 메서드로 빼는 연습을 계속하고 있다만 솔직히 지금도 잘 모르겠고 어렵다.  자바의 메모리 영역이라던가 객체 지향이라던가, 아무튼 자세히 파고들면 머리 아픈 개념들이 참 많은데, 지금 당장 필요한 건 디자인 패턴이다. 진작에 스프링까지 공부했으면 조금 더 나았을까 싶기도 한데, 이제 와서 어쩌겠나. 나는 지금까지 패키지 구조조차 명확하게 나누고 시작한 적이 없었다. 그런데 최근 느..

[GitHub] Commit & Push Changes to GitHub via Terminal

IDE가 제공하는 커밋 기능만 사용하던 사람들이 분명히 있을 겁니다. 저도 그랬던 기억이 있어서 이참에 정리해 봤어요. 1일 1포스팅이 지치기도 하고요. 아무튼 오늘은 이걸로 넘어가겠습니다.1. Git 설치 확인git --version* Git 버전이 출력되면 설치된 것입니다.* 출력되지 않은 경우, Git을 설치해 주세요. [깃 설치하기]2. 로컬 리포지토리 준비git clone https://github.com/username/repository* 작업할 리포지토리의 URL을 복사한 후, 명령어를 통해 클론합니다.* 이미 준비된 상태라면 4번으로 넘어가 주세요.3. 리포지토리로 이동cd repository* cd는 change directory의 약자이며, 명령어를 통해 경로를 변경합니다.4. 변경 ..

[GitHub] Conventional Commits / 커밋 유형 정리

커밋 메시지를 유의미하게 작성하자. 커밋 유형을 통해 각 커밋이 어떤 종류의 변경을 포함하는지 설명할 수 있다. 커밋 메시지를 잘 작성하면, 나중에 프로젝트의 변경 이력을 살펴볼 때 쉽게 이해할 수 있다. 다음은 일반적으로 구분되는 커밋 유형이다. feat (새로운 기능 추가)  feat: 로그인 기능 추가fix (버그 수정)  fix: 로그인 화면에서 발생하는 오류 수정docs (문서 수정)  docs: README.md 파일 업데이트style (스타일 변경)  style: 코드 들여쓰기 정리refactor (리팩토링)  refactor:  함수 구조 개선perf (성능 개선)  perf: 이미지 로딩 속도 개선test (테스트 추가/수정)  test: 유닛 테스트 추가chore (기타 작업)  cho..

[Java] 나를 위해 정리한! 피드백 모음!

개발은 혼자 하는 것이 아니다. 다른 개발자와의 원활한 소통을 위해서 좋은 이름을 짓는 것은 아주 중요하다. 변수 이름, 메서드 이름, 클래스 이름을 짓는데 시간을 투자하자. 이름을 통해 의도를 드러내자. [❗] 변수 이름에 자료형을 사용하지 말자.  변수명에 자료구조 이름을 포함시키면, 나중에 그 자료구조를 변경할 때 변수명을 변경해야 할 수 있다. 변수명을 자료구조에 의존하지 않도록 짓자.  자료형을 드러내는 것보다 의도를 드러내는 것이 중요하다. 예를 들어 carNameList는 해당 변수의 자료형인 리스트에 초점을 맞추고 있다. 차라리 carModels와 같이 구체적인 변수명을 사용하면 해당 변수가 차 모델을 담고 있다는 의도가 명확하게 전달된다.String carNameList = Console..

[Java] BOJ 11723: 비트마스크 (BitMask)

들어가기에 앞서  비트마스크란 컴퓨터의 비트를 이용해, 이진 데이터로 상태를 저장하고 처리하는 기법이다. 작은 메모리 공간으로 다양한 연산을 수행할 수 있기에 효율적인 알고리즘을 설계할 수 있다. 주로 플래그 설정, 집합의 요소 추적, 특정 비트에 대한 연산 등에 사용된다.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)

들어가기에 앞서  이진 탐색이나 이분 탐색이나 영어로는 Binary Search로 같은 말이다.  결국 데이터를 반으로 나누어가며 목푯값을 찾는 알고리즘이다. 여기서 말하는 데이터는 정렬된 배열을 말한다.  정렬된 배열로 진행해야 하는 이유는 이진 탐색 원리에 있다.  우선 시작점과 끝점을 가지고 중간점을 만든다. 중간값을 기준으로 원하는 값과 비교하여 탐색할 구간을 좁혀나간다. 원하는 값이 중간값보다 작으면 왼쪽 절반을 탐색하고, 더 크면 오른쪽 절반을 탐색한다.  위 작업을 반복하다가 원하는 값을 찾거나 구간이 사라지면 종료한다. 이진 탐색을 왜 사용할까?  배열을 처음부터 끝까지 차례대로 탐색하는 방법을 선형 탐색이라고 한다. 배열의 길이가 N이라고 할 때, 최악의 경우 시간복잡도는 O(N)이다. ..