자바 25

프로그래머스 - 기사단원의 무기(JAVA)

문제 설명 숫자나라 기사단의 각 기사에게는 1번부터 number까지 번호가 지정되어 있습니다. 기사들은 무기점에서 무기를 구매하려고 합니다. 각 기사는 자신의 기사 번호의 약수 개수에 해당하는 공격력을 가진 무기를 구매하려 합니다. 단, 이웃나라와의 협약에 의해 공격력의 제한수치를 정하고, 제한수치보다 큰 공격력을 가진 무기를 구매해야 하는 기사는 협약기관에서 정한 공격력을 가지는 무기를 구매해야 합니다. 예를 들어, 15번으로 지정된 기사단원은 15의 약수가 1, 3, 5, 15로 4개 이므로, 공격력이 4인 무기를 구매합니다. 만약, 이웃나라와의 협약으로 정해진 공격력의 제한수치가 3이고 제한수치를 초과한 기사가 사용할 무기의 공격력이 2라면, 15번으로 지정된 기사단원은 무기점에서 공격력이 2인 무..

JAVA - 숫자카드 (백준, 10815)

문제 문제의 요구사항은 결국 길이 (갯수)N 의 카드와 길이 (갯수)M 의 카드를 비교해 일치하는 index 는 1 아니면 0을 출력한다. 맨처음엔 이분탐색 문제인지도 모르고 그냥 단순히 완전탐색으로 찾으려고만 했다.. import java.util.*; public class main { public void card() { List aList = new ArrayList(); List bList = new ArrayList(); String result = ""; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); for(int i=0; i

알고리즘 공부 - 검색부터 다시 해보자

개요 나는 현재 개발자로 솔루션회사에서 근무중인 주니어개발자이다. JAVA 언어가 베이스인 회사에서 자바와 스프링 프레임워크로 코딩하는 것은 당연하지만, 일을 할수록 공부하는 시간이 줄어들고 알고리즘등 혹시 나중에 코딩테스트가 필요할텐데 싶은 생각에 앞으로 꾸준히 문제를 풀어야겠다고 생각이 들어 문법은 건너뛰고 검색 알고리즘부터 재귀, 큐, 스택등으로 개념정리부터 해보려고 한다. 열심히 정리해보자! 선형검색(linear search) 간단하게 생각하자면 선형 = 일자로 쭉 늘어진 것 따위 일것이다. 그렇게 key 와 일치하는 값을 찾기위해 하나씩 검색하면서 진행하는 알고리즘으로 보통 for문이나 switch문으로 loop를 돌려서 index 를 증가시키며 찾는 것이다. 가장 단순한 알고리즘으로 구현하기도..

이펙티브 자바 - 2장 빌더, 싱글톤, private 생성자

아이템 2 - 생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩토리와 생성자에는 똑같은 제약이 하나 있다. 선택적 매개변수가 많을 경우 적절한 대응을 하기가 어렵다는 점이다. 처음 자바를 공부할 때, 사용자가 필요로하는 경우의 수가 많을수록 생성자의 가짓수도 많아지는 경우를 경험해보았을 것이다. 1. 점충적 생성자 패턴 public class Camping { private final int tent; private final int clothes; private final int backpack; private final int food; private final int camper; public Camping(int tent, int food) { this(tent, food); } public C..

Programming/JAVA 2022.03.13

이펙티브 자바 - 1, 2장 개요, 객체 생성과 파괴

개요 매주 이펙티브 자바를 한 단원씩 공부하기로 했다. 자바 개발자로 일하면서 애매하게 알고넘어갔던 부분과 심화적으로 알고있어야 할 내용을 배우기위해서 이펙티브 자바를 선택했다. 어려운 책이라고 후기들을 봤고, 선배 개발자와 얘기해도 어려운 책이니 잘 안읽힌다고 들었지만, 어렵다고 미루기보단 지금부터 봐 둬야 나중에 다시보는 일이 있어도 보기 수월할 것 같았다. 그러므로 시작해보겠다. 1장 : 들어가기 자바 입문자가 아닌 자바에 익숙한사람을 위한 책이라고 설명하며 시작한다. 나 역시 자바 개발자라고 하지만 입문자나 마찬가지라고 생각한다. 문법만 안다고 전부를 아는건 아니며, 알고 쓰는것과 모르고 쓰는것은 다르다는 것을 알고 있기 때문이다. 이 책에선 성능적인 부분도 있지만 그보다 명확하고 정확하고 유용하..

Programming/JAVA 2022.02.20

자료구조 - 큐(queue), 간단한 코드로 파악하기

개념 큐(queue), 역시 스택과 비슷하게 데이터를 일시적으로 쌓아놓기 위한 자료구조입니다. 다만 차이점은 가장 먼저 넣은 데이터를 가장 먼저 꺼내는 선입선출(FIFO, First In First Out) 구조입니다. 실 생활에서 예를 들자면 마트의 대기열이나, 은행 창구에서 차례를 기다리는 순서라고 이해하면 편합니다. enqueue : 인큐 라고 불리며, 큐에 데이터를 삽입하는 작업을 뜻합니다. dequeue : 디큐 라고 불리며, 인큐의 반대로 데이터를 꺼내는 작업을 뜻합니다. front : 프런트는 데이터를 꺼내는 out 쪽을 뜻합니다. rear : 리어는 데이터를 넣는 쪽을 뜻하며 back이라고도 불립니다. 큐를 구현하기 쉬운방법은 역시 배열입니다. public class IntQueue { p..

프로그래머스 - 2016년 (JAVA)

문제 설명 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요. 제한 조건 2016년은 윤년입니다. 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다) 입출력 예 abresult 5 24 "TUE" class Solution { public String solution(int a, int b) { String answer = ..

자료구조 - Stack 를 간단한 코드로 파악하기

개념 스택(Stack)이란? 데이터를 저장하기 위한 자료구조중 하나로 데이터를 일시적으로 저장하기 위해 고안된 개념이며, 가장 나중에 넣은 데이터를 가장 먼저 꺼내는 방식으로 진행됩니다. 데이터의 입출력 순서를 후입선출(LIFO, Last In First Out) 이라고 불리며, 간단하게 표현하자면 가장 나중에 넣은 데이터를 가장 먼저 꺼냅니다. 사용단어? push : 스택에 데이터를 넣는 작업 pop : 스택에서 데이터를 꺼내는 작업 top : 푸시와 팝이 이루어지는 가장 바깥쪽을 탑이라 합니다 bottom : 스택의 가장 아랫부분, 푸시가 가장먼저 이루어졌던 데이터의 위치를 바텀이라고 합니다 peek : 피크(peek)란 '몰래 엿보다'라는 뜻을 가지며 스택의 가장 상단의 top 인덱스를 보여줍니다...

스프링부트 - SXSSF 형식으로 엑셀 다운로드 모듈만들기

개요 회사에 입사 후 기존의 엑셀 처리는 Jxls 방식으로 처리되었었다. 이 방식은 미리 템플릿을 원하는 페이지나 형식마다 따로 만들어야했고, 대용량의 데이터를 처리할 땐 너무 오래걸리거나 이로인해 거래처에서 여러번 시도하다가 동시에 Request 가 생겨 OOM 발생이 발생해 서버에 무리를 주는 상황이 발생한 경우도 있었다. 이런 리스크나 성능면에서 떨어져 poi 라이브러리에서 제공되는 sxssf 방식으로 변경업무를 진행했다. SXSSF 방식은 일정 용량을 넘어선 처리에선 자동으로 메모리를 관리해 서버에 부담이 적다는 점과 속도가 무난하다는 장점이 있다. 더 다양한 이유와 설명이 있겠으나, 자세한 점은 생략하고 본론으로 들어가겠다. 프로세스 기존의 프로세스는 EXCEL 버튼을 클릭할 경우, 페이지에서 ..

Programming/Spring 2022.01.05

프로그래머스 - 완주하지 못한 선수(JAVA)

문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 입출력 예participantcompletionreturn ["leo", "kiki",..