전체 글285 프로그래머스_힙(Heap)_라면공장 (JAVA) 문제 설명 라면 공장에서는 하루에 밀가루를 1톤씩 사용합니다. 원래 밀가루를 공급받던 공장의 고장으로 앞으로 k일 이후에야 밀가루를 공급받을 수 있기 때문에 해외 공장에서 밀가루를 수입해야 합니다. 해외 공장에서는 향후 밀가루를 공급할 수 있는 날짜와 수량을 알려주었고, 라면 공장에서는 운송비를 줄이기 위해 최소한의 횟수로 밀가루를 공급받고 싶습니다. 현재 공장에 남아있는 밀가루 수량 stock, 밀가루 공급 일정(dates)과 해당 시점에 공급 가능한 밀가루 수량(supplies), 원래 공장으로부터 공급받을 수 있는 시점 k가 주어질 때, 밀가루가 떨어지지 않고 공장을 운영하기 위해서 최소한 몇 번 해외 공장으로부터 밀가루를 공급받아야 하는지를 return 하도록 solution 함수를 완성하세요. .. ▸알고리즘 문제 풀이 2020. 4. 24. 스프링 의존 주입(DI)과 인터페이스 사용에 관하여 인터넷에서 자료를 검색하다보면 클래스를 작성할 때 무조건적으로 인터페이스 구현을 하고 있는 것을 심심찮게 볼 수 있습니다. 예를 들어 인터페이스 이름이 "user"라면 실제 구현되는 서비스 클래스 이름은 "userImpl"가 되는 것이죠. 깃허브도 아닌 인터넷 블로그에 있는 코드들은 대부분 간단한 로직이 대부분이라 처음 스프링을 접할 때 대체 왜 쓸데없이 클래스가 많아지고 코드만 복잡해지게 의미 없는 인터페이스를 사용하는걸까 하는 의문을 많이 가졌었습니다. 스프링을 공부하면서 얻은 결론부터 말하자면 스프링(특히 DI)에서 인터페이스 사용은 당연하고 필수적인 것이 맞지만, 개방 폐쇄 원칙(OCP)에 기반한 전략 패턴을 미리 설계한 것이 아닌 그저 습관적인 사용이라면 전혀 무의미하다는 것입니다. 이는 토비의.. ▸Spring MVC/기본 상식 2020. 4. 23. 프로그래머스_힙(Heap)_더맵게 (JAVA) 문제 설명 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. - 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요. 제한 사항 scov.. ▸알고리즘 문제 풀이 2020. 4. 23. 프로그래머스_스택/큐_주식가격 (JAVA) 문제 설명 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,000 이하인 자연수입니다. prices의 길이는 2 이상 100,000 이하입니다. 입출력 예 입출력 예 설명 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다. 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다. 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다. 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다. 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다. 스택/큐의 첫번 째 문제였던 탑 문제와 유사한.. ▸알고리즘 문제 풀이 2020. 4. 23. 프로그래머스_스택/큐_쇠막대기 (JAVA) 문제 설명 여러 개의 쇠막대기를 레이저로 절단하려고 합니다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자릅니다. 쇠막대기와 레이저의 배치는 다음 조건을 만족합니다. (a) 레이저는 여는 괄호와 닫는 괄호의 인접한 쌍 '()'으로 표현합니다. 또한 모든 '()'는 반드시 레이저를 표현합니다. (b) 쇠막대기의 왼쪽 끝은 여는 괄호 '('로, 오른쪽 끝은 닫힌 괄호 ')'로 표현됩니다. 아래 그림은 위 조건을 만족하는 예를 보여줍니다. 수평으로 그려진 굵은 실선은 쇠막대기이고, 점은 레이저의 위치, 수직으로 그려진 점선 화살표는 레이저의 발사 방향입니다. 이러한 레이저와 쇠막대기의 배치는 다음과 같이 괄호를 이용하여 왼쪽부터 순서대로 표현할 .. ▸알고리즘 문제 풀이 2020. 4. 23. 프로그래머스_스택/큐_프린터 (JAVA) 문제 설명 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다. 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 .. ▸알고리즘 문제 풀이 2020. 4. 22. Spring Security_CSRF Token의 개념과 사용 방법 - Develop OS : Windows10 Ent, 64bit - WEB/WAS Server : Tomcat v9.0 - DBMS : MySQL 5.7.29 for Linux (Docker) - Language : JAVA 1.8 (JDK 1.8) - Framwork : Spring 3.2.9 Release - Build Tool : Maven 3.6.3 - ORM : Mybatis 3.2.8 [ CSRF(Cross Site Request Forgery) 공격 ] 사용자 의지와 무관하게 공격자의 의도대로 서버에 특정 요청을 하도록 함 지금까지 작성한 컨트롤러 코드를 보면 특정 URL에 대한 요청을 처리기 메소드가 받아서 처리 후 뷰 페이지로 돌려주는 형태입니다. 물론 RESTful API라면 뷰 대신 .. ▸Spring Security 2020. 4. 22. 스프링 Security_Remember-me 커스터마이징(커스텀 필터) [3/3] - Develop OS : Windows10 Ent, 64bit - WEB/WAS Server : Tomcat v9.0 - DBMS : MySQL 5.7.29 for Linux (Docker) - Language : JAVA 1.8 (JDK 1.8) - Framwork : Spring 3.1.1 Release - Build Tool : Maven 3.6.3 - ORM : Mybatis 3.2.8 이전 글에서는 Remember-me 구현체를 커스터마이징 완료했습니다. 이제 남은 로직은 인증메일에서 "인증하기"를 눌렀을 때 DB 테이블에서 해당 series의 certified 컬럼값을 'true'로 업데이트 해주기만 하면 됩니다. 링크 주소에 암호화된 "series:token" 값을 파라미터로 보내주는수밖에.. ▸Spring Security 2020. 4. 22. 스프링 Security_Remember-me 커스터마이징 [2/3] - Develop OS : Windows10 Ent, 64bit - WEB/WAS Server : Tomcat v9.0 - DBMS : MySQL 5.7.29 for Linux (Docker) - Language : JAVA 1.8 (JDK 1.8) - Framwork : Spring 3.1.1 Release - Build Tool : Maven 3.6.3 - ORM : Mybatis 3.2.8 이전 글에서는 컨텍스트(Bean) 설정을 통해 디폴트 Remember-me가 가진 정보를 간단하게 커스터마이징 했었습니다. 하지만 이 경우 로직 자체는 여전히 디폴트로 사용할 수밖에 없기 때문에 이번에는 새로운 로직을 적용하기 위한 커스터마이징을 하도록 하겠습니다. 먼저 디폴트 Remember-me를 구성하는 클.. ▸Spring Security 2020. 4. 22. 스프링 Security_Remember-me 커스터마이징 [1/3] - Develop OS : Windows10 Ent, 64bit - WEB/WAS Server : Tomcat v9.0 - DBMS : MySQL 5.7.29 for Linux (Docker) - Language : JAVA 1.8 (JDK 1.8) - Framwork : Spring 3.1.1 Release - Build Tool : Maven 3.6.3 - ORM : Mybatis 3.2.8 이 글에서는 간단한 컨텍스트 설정을 통한 커스터마이징입니다. 아예 새로운 로직을 적용하기 위한 커스터마이징은 아래 링크를 참조하시면 됩니다. [Spring Security] - 스프링 Security_Remember-me 커스터마이징 [2/3] [Spring Security] - 스프링 Security_Remem.. ▸Spring Security 2020. 4. 22. 스프링 필터와 스프링 시큐리티(Spring Security)의 동작 구조 - Develop OS : Windows10 Ent, 64bit - WEB/WAS Server : Tomcat v9.0 - DBMS : MySQL 5.7.29 for Linux (Docker) - Language : JAVA 1.8 (JDK 1.8) - Framwork : Spring 3.1.1 Release - Build Tool : Maven 3.6.3 - ORM : Mybatis 3.2.8 웹 서비스에서 스프링 시큐리티는 MVC 패턴 이전에 '필터'로서 동작합니다. 필터란 클라이언트 요청이 서블릿으로 가기 전에 먼저 처리할 수 있도록 톰캣(WAS)에서 지원해주는 기능입니다. 그래서 설정도 톰캣 설정 파일인 'web.xml' 파일에다가 해줍니다. web.xml 파일은 톰캣이 구동되는 시점에 알고 있어.. ▸Spring Security 2020. 4. 22. 프로그래머스_스택/큐_기능 개발 (JAVA) 문제 설명 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요. 제한 사항 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다. 작업 진도는 100 미만의 자연수입니다. 작업 속도는 100 이하의 자.. ▸알고리즘 문제 풀이 2020. 4. 20. 프로그래머스_스택/큐_다리를 지나는 트럭 (JAVA) 문제 설명 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다. ※ 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다. 예를 들어, 길이가 2이고 10kg 무게를 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다. 따라서, 모든 트럭이 다리를 지나려면 최소 8초가 걸립니다. solution 함수의 매개변수로 다리 길이 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭.. ▸알고리즘 문제 풀이 2020. 4. 20. 프로그래머스_스택/큐_탑 (JAVA) 문제 설명 수평 직선에 탑 N대를 세웠습니다. 모든 탑의 꼭대기에는 신호를 송/수신하는 장치를 설치했습니다. 발사한 신호는 신호를 보낸 탑보다 높은 탑에서만 수신합니다. 또한, 한 번 수신된 신호는 다른 탑으로 송신되지 않습니다. 예를 들어 높이가 6, 9, 5, 7, 4인 다섯 탑이 왼쪽으로 동시에 레이저 신호를 발사합니다. 그러면, 탑은 다음과 같이 신호를 주고받습니다. 높이가 4인 다섯 번째 탑에서 발사한 신호는 높이가 7인 네 번째 탑이 수신하고, 높이가 7인 네 번째 탑의 신호는 높이가 9인 두 번째 탑이, 높이가 5인 세 번째 탑의 신호도 높이가 9인 두 번째 탑이 수신합니다. 높이가 9인 두 번째 탑과 높이가 6인 첫 번째 탑이 보낸 레이저 신호는 어떤 탑에서도 수신할 수 없습니다. 맨 왼쪽.. ▸알고리즘 문제 풀이 2020. 4. 20. 프로그래머스_DFS/BFS_여행 경로 문제 설명 주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 ICN 공항에서 출발합니다. 항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해주세요. 제한사항 모든 공항은 알파벳 대문자 3글자로 이루어집니다. 주어진 공항 수는 3개 이상 10,000개 이하입니다. tickets의 각 행 [a, b]는 a 공항에서 b 공항으로 가는 항공권이 있다는 의미입니다. 주어진 항공권은 모두 사용해야 합니다. 만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다. 모든 도시를 방문할 수 없는 경우는 주어지지 않습니다. 입출력 예 설명 예제 #1 [ICN, JFK, HND,.. ▸알고리즘 문제 풀이 2020. 4. 19. 이전 1 2 3 4 5 6 ··· 19 다음 💲 추천 글 반응형