[백준] 1874_스택 수열 - JAVA
·
알고리즘/알고리즘 유형
백준_1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 스택(Stack) 삽입과 삭제 연산이 후입선출(LIFO : Last-in First-out)으로 이루어진 자료구조이다. 후입선출은 산입과 삭제가 한 쪽에서만 이루어진다. 스택 용어 top : 삽입과 삭제가 일어나는 위치 push : top 위치에 새로운 데이터를 삽입하는 연산 pop : top 위치에 현재 있는 데이터를 삭제하고 확인하는 연산 peek : top 위치..
[백준] 11003_최솟값 찾기 - JAVA
·
알고리즘/알고리즘 유형
백준_11003 11003번: 최솟값 찾기 N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다. www.acmicpc.net 덱(deque) 위 문제는 슬라이딩 윈도우와 정렬을 사용하면 될 것 같지만 정렬은 nlog(n)의 시간 복잡도를 가지고, N과 L의 범위가 5,000,000인 이 문제에서는 정렬을 사용할 수 없다. O(n)의 시간 복잡도로 해결해야 한다. 정렬 대신 슬라이딩 윈도우와 덱(deque)이란 자료구조를 사용하면 이 문제를 풀 수 있다. 덱은 양 끝에서 데이터를 삽입하거나 삭제할 수 있는 자료구조이다. 왼쪽에서는 addFi..
토비의 스프링 부트 - DI와 테스트, 디자인 패턴
·
공부/Spring
테스트 코드를 이용한 테스트 여태 코드를 작성하면 서버를 재실행하고 인텔리제이 터미널에서 HTTPie로 테스트를 진행했다. 이렇게 사람이 수동으로 테스트를 하는 것보다 테스트 코드를 작성해서 사람보다는 기계?가 테스트하는 게 훨씬 시간도 절약되고 정확성이 높다. HelloApiTest.java public class HelloApiTest { @Test void helloApi() { } } 내용이 빈 메서드를 만들고 실행해보면 테스트가 통과되었다는 표시가 뜬다. 검증할 내용이 없어 테스트가 통과되지 않는 상황이 없기에 몇 번을 돌려도 테스트는 통과된다. TestRestTemplate.java @Test void helloApi() { // http localhost:8080/hello?name=Spri..
[프로그래머스_1] 소수 찾기 JAVA
·
알고리즘/알고리즘 풀이
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr CODE import java.util.*; class Solution { public int solution(int[][] sizes) { int answer = 0; int w = 0; int h = 0; int maxW = 0; int maxH = 0; for(int i = 0; i < sizes.length; i++) { w = Math.max(sizes[i][0], sizes[i][1]); h = Math.min(sizes[i][0], sizes[i][1]); sizes[i][0] = w; sizes..
토비의 스프링 부트 - 독립 실행형 스프링 애플리케이션-2
·
공부/Spring
스프링 컨테이너로 통합 현재 코드는 스프링 컨테이너를 만들고 서블릿을 초기화하는 작업을 스프링 컨테이너가 초기화되는 과정 중에 일어나도록 코드를 변경해보자. 이유는 스프링부트가 그렇게 사용하고 있다. 스프링 컨테이너의 초기화 작업은 refresh()에서 일어난다. applicationContext.refresh(); refresh() 전에 호출되는 onRefresh()를 사용하려면 GenericWebApplicationContext를 상속받아서 오버라이딩 해야한다. 클래스를 따로 만들기보다는 익명 클래스를 사용하여 오버라이딩 한다. public class HellobootApplication { public static void main(String[] args) { GenericWebApplicatio..
토비의 스프링 부트 - 독립 실행형 스프링 애플리케이션-1
·
공부/Spring
스프링 컨테이너 사용 기존 소스 코드 정리 FrontController의 로직 중 'else if~' 구문 삭제 HTTP Status Code 세팅 코드 삭제 (에러가 나지 않는 한 알아서 200 OK 코드가 붙어 나간다.) 즉, 생략가능 HTTP Header에 세팅한 Content-Type 부분 setContentType() 메서드로 변경. 이러면 header ID를 생략하고 값만 넣으면 됨 public class HellobootApplication { public static void main(String[] args) { TomcatServletWebServerFactory serverFactory = new TomcatServletWebServerFactory(); // 다양한 서버 프로그램을 ..
[프로그래머스_1] 소수 찾기 JAVA
·
알고리즘/알고리즘 풀이
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr CODE(기본) class Solution { public int solution(int n) { int answer = 0; boolean flag = true; for(int i = 2; i
[프로그래머스_1] 소수 만들기 JAVA
·
알고리즘/알고리즘 풀이
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr CODE import java.util.*; class Solution { public int solution(int[] nums) { int answer = 0; Arrays.sort(nums); for(int i = 0; i < nums.length; i++) { for(int j = i+1; j < nums.length; j++) { for(int k = j+1; k < nums.length; k++) { int result = isPrime(nums[i], nums[j], nums[k]); answer..
[프로그래머스_1] 숫자 짝꿍 JAVA
·
알고리즘/알고리즘 풀이
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr CODE import java.util.*; class Solution { public String solution(String X, String Y) { StringBuilder answer = new StringBuilder(); int[] xCntArr = new int[10]; int[] yCntArr = new int[10]; for(String x : X.split("")) { xCntArr[Integer.parseInt(x)]++; } for(String y : Y.split("")) { yCnt..
토비의 스프링 부트 - 독립 실행형 서블릿 애플리케이션
·
공부/Spring
Containerless 개발 준비 내장형 톰캣을 실행하지 않도록 HellobootApplication.java에서 일부 코드를 삭제한다. package tobyspring.helloboot; public class HellobootApplication { public static void main(String[] args) { } } 서블릿 컨테이너 띄우기 톰캣은 설치를 해서 사용할 수도 있지만 내장형 톰캣도 따로 있어 설치하지 않고 임베디드 형식으로 사용할 수 있게 개발되었다. 스프링 부트는 https://start.spring.io/ 에서 프로젝트를 생성하면 프로젝트에 자동으로 임베디드 톰캣 라이브러리가 포함된다. 그럼 프로젝트에서 내장형 톰캣을 불러와 사용해보자. 톰캣 라이브러리를 직접 가져오는게..
[프로그래머스_1] 햄버거 만들기 JAVA
·
알고리즘/알고리즘 풀이
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr CODE import java.util.*; class Solution { public int solution(int[] ingredient) { String recipe = "1231"; StringBuffer sb = new StringBuffer(Arrays.toString(ingredient).replaceAll("[^0-9]","")); int answer = 0; while(sb.indexOf(recipe) > -1) { int startIdx = sb.indexOf(recipe); sb.delet..
[프로그래머스_1] 2016 JAVA
·
알고리즘/알고리즘 풀이
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr CODE class Solution { public String solution(int a, int b) { int[] month = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; String[] week = {"FRI","SAT","SUN", "MON", "TUE", "WED", "THU"}; int sum = 0; for(int i = 1; i < a; i++) { sum += month[i]; } int idx = sum + b-1; return week[..
[프로그래머스_1] 체육복 JAVA
·
알고리즘/알고리즘 풀이
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr CODE import java.util.*; class Solution { public int solution(int n, int[] lost, int[] reserve) { int answer = n - lost.length; List list = new ArrayList(); for(int l : reserve) { list.add(l); } Arrays.sort(lost); Collections.sort(list); for(int i = 0; i < lost.length; i++) { for(int j ..
토비의 스프링 부트 - 스프링 부트 시작하기
·
공부/Spring
프로젝트 생성 Spring Boot 버전은 2.7.10을 선택, Dependency는 Spring Web 선택, Java 버전은 11을 선택했다. Hello 컨트롤러 HelloController 생성 hello() 작성 @GetMapping("/hello") public String hello(String name) { return "hello " + name; } 서버 실행 후 확인 Hello API 테스트 HTTP 요청을 만들고 응답을 확인하는데 사용되는 도구 웹 브라우저 개발자 도구 curl HTTPie - https://httpie.io/ Homebrew 설치가 되어 있으면 'brew install httpie' 커맨드로 설치 가능Intellij IDEA Ultimate- http request ..
[프로그래머스_1] 모의고사 JAVA
·
알고리즘/알고리즘 풀이
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr CODE import java.util.*; class Solution { public List solution(int[] answers) { List answer = new ArrayList(); int[] score = {0, 0, 0}; int[][] supoja = { {1, 2, 3, 4, 5}, {2, 1, 2, 3, 2, 4, 2, 5}, {3, 3, 1, 1, 2, 2, 4, 4, 5, 5} }; int idx_1 = 0, idx_2 = 0, idx_3 = 0; int len_1 = supoja..