문제 프로그래머스 2018 서머코딩- 점프와 순간이동 https://programmers.co.kr/learn/courses/30/lessons/12980 풀이 순간이동으로 최대한 많이 이동해야 건전지 사용량이 최소가 된다. 최댓값 n에서 2로 나누면서 값을 확인한다. n이 홀수일 (n-1)/2 해준다. 건전지 사용량 1 증가시킨다. n이 1되면 종료 코드 def solution(n): ans = 1 while True: if n ==1: break; if n % 2 == 0: n=n/2 else: n=(n-1)/2 ans +=1 return ans
문제 프로그래머스 2018 서머코딩- 기지국 설치 https://programmers.co.kr/learn/courses/30/lessons/12979 풀이 모든 영역을 커버할 수 있는 기지국을 최소로 설치하는 문제이다. 설치 할 기지국의 영역이 설치 된 기지국의 영역과 겹치지 않으면서, 최대로 활용되는 것이 최적해이다. 설치 된 기지국 영역에 속하지 않으면 기지국을 설치하고 기지국이 가질 수 있는 최대 영역(2*w+1)만큼 현재 위치를 이동시킨다. 영역에 속한다면 기지국 영역의 +1로 현재 위치를 이동시키고, index를 증가시켜 다음 기지국을 기준으로 다시 반복하여 최적의 설치 개수를 구할 수 있다. 코드 def solution(n, s, w): answer=0 idx = 0 locate = 1 wh..
개발을 하다보면 JSON 데이터를 사용할 일이 많다. JSON 데이터의 형식을 보고 DTO 클래스를 한땀 한땀 만드는게 엄청 귀찮았다. 물론 간단한 API라면 금방 만들겠지만 만약 API가 여러개라면 혹은 JSON의 형태가 복잡하다면 어떨까? 개발자는 DTO 클래스를 만들기 위해 굉장히 비생산적인 일을 해야한다. 나 또한 이러한 귀찮음을 경험을 해봤고 DTO를 자동으로 만들어주는 기능이 있으면 좋겠다는 생각에 검색을 하다보니 간단하게 JSON 형태에 맞는 DTO 생성을 해주는 DTO generator라는 IntelliJ 플러그인이 있어서 이를 사용하는 방법을 정리할까 한다. 1. DTO generator 플러그인 설치 우선 DTO generator를 IntelliJ에서 설치해보자. 설치는 굉장히 간단하다..
어떤 요청에 대한 응답으로 JSON을 많이 이용하고 있다. 이때 필요한 Data만 전달받는 DTO를 만들고 적용해보자. (카카오톡 챗봇 예제를 이용해 진행했습니다.) 1. 역직렬화(Deserialize)란? byte로 변환된 Data를 원래대로 변환하는 기술을 역직렬화(Deserialize)라고 부른다. Json → Java Object 변환 2. 예제 카카오 챗봇에서는 요청과 응답을 JSON Data로 주고 받는다. 전달된 JSON Data를 통해 사용자를 식별하거나, 사용자가 원하는 동작을 파악할 수 있고 데이터를 컨트롤할 수 있게 된다. 하지만 내가 사용하고자 하는 정보가 명확히 정해져 있고 한정적이라면 보내지는 JSON Data를 모두 받아 처리할 필요가 없다. 예를 들면, { "intent": ..
인증, 인가, 권한, 로그인 등의 기능을 제공해주는 Spring Security를 학습하고 적용해보자. 1. Spring Security 개념 스프링 시큐리티는 스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. 보안과 관련해서 체계적으로 많은 옵션을 제공 일일이 보안 관련 로직을 작성하지 않아도 됨 1. Spring Security 용어 접근 주체 (Principal) 보호된 리소스에 접근하는 유저 인증 (Authentication) 현재 유저가 누구인지 확인한다. ex) Form Login 애플리케이션의 작업을 수행할 수 있는 주체임을 확인하는 과정 인가 (Authorization) 현재 유저가 리소스에 접근할 수 있는 권한이 있는지 검사하는 과정 인증(..
1. JUnit5 - Assertion JUnit Jupiter는 다양한 Assertion 메서드가 포함되어있다. Assertion 클래스를 살펴보면 메서드는 모두 static 메서드이고, 오버로딩을 통해 다양한 타입을 지원하고 있다. 다양한 Assertion 메서드를 살펴보자. assertEqulas(expected, actual) 실제 값이 기대한 값과 같은지 확인 assertNotNull(actual) 실제 값이 null이 아닌지 확인 assertTrue(boolean) 다음 조건이 True인지 확인 assertAll(executables) 모든 구문을 확인 functional Interface인 excutables 타입을 매개변수로 받는다. assertThrows(expectedType, exec..
1. JUnit5 소개 단위 테스트를 작성하는 자바 개발자의 약 93%가 JUnit을 사용하고있다는 Jetbrains의 통계가 있다. 그만큼 JUnit은 자바 개발자가 가장 많이 사용하고있는 대중적인 테스팅 프레임워크이다. Java 8 이상 필요 2. JUnit5 시작하기 스프링 부트 프로젝트 기본적으로 JUnit5 의존성이 추가된다. 스프링 부트 프로젝트가 아니라면 의존성을 추가해주면된다. Gradle testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.6.2' Maven org.junit.jupiter junit-jupiter-engine 5.6.2 test 3. 기본 애노테이션 @Test 단위 테스트 @T..
신입 개발자로 일을 시작하게 되고, 내가 너무나 부족하다는 것을 다시 한번 깨달았다. 모르는 것 투성이고 내가 뭘 모르는지조차 모르는 상태.... 공부를 더 많이 해야겠구나 싶었다. 개발자는 평생 공부해야 하는 직업이라는 말을 많이 들어왔었는데, 정말 맞는 말인 것 같다. 그래서 최근에는 어떻게 공부해야 효율적으로, 더 빠르게 성장할 수 있을까? 란 고민을 많이 하고있다. 평생 지치지 않고 가져갈 수 있는 나만의 학습 루틴을 찾고 싶다는 생각이 많이 들었다. 나와 같은 고민을 가지고 있는 개발자들이 꽤 많을 거라 생각했다. 그래서 내가 시도해 본 공부 방법에 대해 리뷰 형식의 글을 쓰면 나에게 맞는 학습 루틴을 찾는 것 뿐만아니라, 다른 사람들에게도 좋은 자극이 되지 않을까 싶어 이 글을 쓰기로 마음먹었..
JAVA에서 JSON 데이터를 응답으로 보내기 위한 다양한 직렬화 방법이 존재한다. 그중Jackson 라이브러리 사용한 직렬화(Serialize) 방법을 알아보자. (예전에 진행했던 카카오톡 챗봇 예제를 이용해 진행했습니다.) 1. 직렬화(Serialize)란? Java에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술 범용적인 API나 데이터를 변환하여 추출할 때 많이 사용된다. Java Object → Json Data 변환 2. 예제 어떤 서드파티 애플리케이션을 사용하기 위해 정해진 Json 응답 형식이 있다고 생각해보자. 정해진 응답 형식을 만족해야만 애플리케이션이 정상적으로 동작할 것이다. 아래는 카카오톡 챗봇에서 요구하는..