본문 바로가기

TIL

(50)
[2022-1-9]프로그래머스 레벨1 10문제 오늘은 프로그래머스 1단계에서 특히 풀이가 간단한 문제 10개를 풀어봤다. 대부분 어렵지 않게 풀었지만 새로 알게된 부분도 있어서 정리해보려한다. 프로그래머스 코딩테스트 연습문제 https://programmers.co.kr/learn/courses/30/lessons/77884 코딩테스트 연습 - 약수의 개수와 덧셈 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주 programmers.co.kr 일정범위의 양수들에서 각각의 약수의 개수를 구해 짝수면 더하고 홀수는 빼는 문제였다. 약수를 구하는 가장 빠른 방법은 양수 n 을 제..
[2022-1-8] 스프링 핵심 원리 - 기본편 : 스프링 컨테이너와 스프링 빈 (1/2) / 프로그래머스 연습문제 - 폰켓몬(Set, HashSet) 스프링 핵심 원리 - 기본편(스프링 컨테이너와 스프링 빈 1/2) 저번시간에 AppConfig에 @Configuration 과 @Bean 애너테이션을 추가해서 ApplicationContext를 통해 스프링 컨테이너를 생성했다. 오늘은 컨테이너가 생성되면 어떻게 Bean이 생성되고 조회할 수 있는지 공부했다. AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); 이 코드를 통해 스프링 컨테이너를 생성한다. 스프링 컨테이너 안에는 Spring Bean 저장소가 있다. 컨테이너를 생성할 때 파라미터로 넘어온 AppConfig 클래스 통해 스프링 빈을 등록한다. 빈의 이름은 @Bean으로 등..
[2022-1-7] 프로그래머스 연습 문제 - 소수 만들기(조합, DFS 응용) 매일 공부 시작전에 프로그래머스 문제를 하나씩 풀고 있다. 오늘은 내적을 푸는 날이었는데 문제가 너무 쉬워서 다음문제도 풀어보았다. 문제 이름은 소수 만들기 였다. 정수배열에서 세가지 수를 뽑아 그 합이 소수인 개수를 구하는 문제였다. 이를 위해 일단 정수 배열에서 세개의 중복없는 수를 뽑아야 했고(조합) 그 수들의 집합의 합을 구해야 했다. 고등학교 때 이후로 순열 조합과 담쌓은지 오래돼서 기억을 되돌는데 오래 시간이 걸렸다. 그 후 조합을 구하는 알고리즘을 검색해 봤는데 DFS를 응용해서 구할 수 있다고 한다. 근데 이문제를 풀 때 DFS를 어떻게 응용해야 풀 수 있다는 건지 이해가 잘 안됐다. 그래서 재귀를 이것 저것 다뤄보다가 결국 소 뒷걸음치다가 맞아서 아래와 같은 코드를 풀 수 있었다. cla..
[2022-1-6] 스프링 핵심 원리 - 기본편 : 프레임워크, IoC, DI 2022.01.05 - [TIL] - [2015-1-5]문제를 똑바로 읽자 / 스프링 핵심원리 기본편 AppConfig 구현 [2015-1-5]문제를 똑바로 읽자 / 스프링 핵심원리 기본편 AppConfig 구현 문제를 똑바로 읽자 오늘 푼 프로그래머스 문제는 없는 문제 더하기 였다. 문제 자체는 엄청 쉬웠기 때문에 빠르게 풀었다. 다만 문제의 요구사항 에서, 배열 numbers 의 모든 수는 다르다는 조건 unannn.tistory.com 어제, 구현객체에서 다른 구현 객체를 생성, 연결하는 역할을 AppConfig 에게 위임하고, 구현 객체에서는 프로그램의 로직만을 담당하도록 리팩토링 했다. 이 과정에서 어떻게 OCP 가 지켜지는지, DIP가 어떻게 이루어질 수 있는지 확인했다. 제어의 역전 이처럼 ..
[2022-1-5]문제를 똑바로 읽자 / 스프링 핵심원리 기본편 AppConfig 구현 문제를 똑바로 읽자 오늘 푼 프로그래머스 문제는 없는 문제 더하기 였다. 문제 자체는 엄청 쉬웠기 때문에 빠르게 풀었다. 다만 문제의 요구사항 에서, 배열 numbers 의 모든 수는 다르다는 조건이 있었다. 나는 당연히 중복을 허용하지 않을 것이라고 속단하고 중복까지 생각한 코드를 짰는데, 다른사람의 코드가 너무 짧은 것을 보고 조건을 잘못 알았다는 것을 알아차렸다. 이 문제같은 경우에는 쉬워서 크게 문제가 안됐지만 과거에도 문제를 잘못 파악해 원래 문제가 요구하는 것보다 어렵게 풀거나, 잘못 풀고 문제를 다시 파악해 수정하는 경우가 많았기 때문에 오늘 실수가 크게 느껴졌다. 앞으로 풀게될 문제들은 적어도 문제를 잘못읽어서 해매지 않도록 꼭 꼼꼼히 요구사항을 확인해야겠다. 나중에 코테를 볼때도, 취업을..
[2022-1-4] Stack<E> 뜯어보기 오늘 프로그래머스에서 푼 크레인 인형뽑기 게임 은 Stack을 쓰면 매우 쉽게 풀리는 문제였다. Stack 객체를 생성하여 풀었는데 Stack의 개념은 학교에서 배워서 알고있었지만 c언어로만 구현해 봤을 뿐 자바에서 사용해본 것은 처음이라 이번에 사용하면서 Stack 클래스가 어떻게 동작하는지 알아봤다.(문제 풀이는 하단에) Stack 클래스는 Vector클래스를 상속받는다. Vector 클래스에서 protected Object[] elementData 로 선언된 객체 배열에 데이터를 저장하게 된다. 처음 Vector를 봤을 때 이게 도대체 뭔가했더니 그냥 배열이었다. elementCount는 배열에 추가된 객체의 개수이고 capacityIncrement 는 배열이 꽉 찼을 때 더해주는 크기이다. Sta..
[2022-1-3]프로그래머스 연습 문제 리팩토링 리팩토링 이유 어제 푼 프로그래머스 Level1 - 키패드 누르기 문제에서 코드 속도는 나쁘지 않았지만 가독성이 너무 떨어져서 푸는 도중에 계속 헷갈리고 반복적으로 실수가 나왔다. 지금 내 수준에서 할 수 있는 만큼 리팩토링을 하여 가독성을 최대한 높혀보려 한다. [TIL] - [2022-1-2]알고리즘 문제 풀이, 자바 프로젝트 생성 및 예제 개발 - 어제한 부분 수정 사항 1. Enum 어제 약간 보고 써본 Enum을 조금 더 공부해봤다. Effective Java 아이템34,35 를 참고하고 추가로 검색도 해보면서 개발했다. 1) enum 클래스명 Vertical ->Column 키패드가 세로 라인으로 한줄 두줄 세줄 있으니까 이를 나타내려고 Vertical이라는 네이밍을 썻었는데 의미가 잘 안맞는..
[2022-1-2]알고리즘 문제 풀이, 자바 프로젝트 생성 및 예제 개발 프로그래머스 Level1 - 키패드 누르기 class Solution { enum Vertical{ LEFT, MIDDLE, RIGHT } public String solution(int[] numbers, String hand) { StringBuilder answer = new StringBuilder(""); Hand leftHand = new Hand('*',Vertical.LEFT); Hand rightHand = new Hand('#',Vertical.RIGHT); for(int number : numbers){ char charNumber = Character.forDigit(number,10); if(getVertical(number) == Vertical.LEFT){ leftHand.se..