반응형

분류 전체보기 47

[Python 문제 풀이] 프로그래머스 '당구 연습'

Programmers 파이썬 당구 연습 그냥 계산하는 게 빠른 문제 조건파악 1. 공은 절대 겹치지 않는다. 2. 모서리에 부딪히는 경로는 절대 최단 거리가 될 수 없다. (계산해보면 앎) 3. 공이 수직 또는 수평으로 나란히 있는 경우 원쿠션을 성공할 수 없는 경우의 수가 생긴다. 접근 상하좌우로 경우의 수는 네 개. 그냥 네 방향 다 계산해서 제일 작은 거 찾으면 된다. 거리를 계산하기 전에 좌표만 가지고 어떤 벽에 부딪힐 건지 선택할 수 있으면 좋겠는데, 방법을 모르겠다. 그걸 모르고 단순 계산으로 풀어도 시간초과가 나지 않으니 Lv.2이겠지. 의사코드 1. balls배열에 대해 반복 2. 두 공이 나란한지 확인 3. 원쿠션이 발생하도록 네 방향(또는 세 방향)에 부딪혀서 공을 맞추는 거리를 계산 ..

[Python 문제 풀이] 프로그래머스 '연속된 부분 수열의 합'

Programmers Lv.2 연속된 부분 수열의 합 / 파이썬 접근 두 개의 포인터를 놓고 부분 수열의 합을 반복해서 비교하며 위치를 옮기거나 확장한다. 가장 짧은 길이의 부분 수열을 찾기 위해, 더 큰 수가 위치한 뒤쪽 인덱스부터 탐색한다. sequence의 길이가 길기 때문에 sum()함수를 반복해서 사용하면 시간초과가 발생할 수 있으므로 부분합 변수를 만들어 갱신하도록 한다. 의사코드 i와 j를 마지막 인덱스 번호로 초기화 sub_total을 마지막 원소의 값으로 초기화 sub_total이 k와 같아질 때까지 i, j 조정하면서 sub_total을 갱신 sub_total이 k와 같을 때 더 앞쪽에 있는 동일한 부분 수열을 가리키도록 i와 j를 감소 코드 def solution(sequence, k..

Maven 프로젝트 JDK 런타임 버전 설정하기

maven 프로젝트가 빌드되어 실행될 java 런타임 버전을 직접 설정하고 싶다면 다음과 같은 방법을 이용하면 된다. pom.xml 다음 태그 추가하기 .. .. {version} {version} .. .. {version} 대신 원하는 버전을 기입하면 된다. 아래는 jdk 1.8을 사용하고자 하는 상황의 예시이다. 1.8 1.8 VS Code에서 java runtime path가 설정이 안 되거나 혹은 프로젝트가 동작할 java 런타임 환경과 현재 개발환경이 다르다면 위 방법을 통해 해결할 수 있다.

[Python 문제 풀이] 프로그래머스 '과제 진행하기'

Programmers Lv.2 파이썬 '과제 진행하기' 풀이 및 코드그냥 제때제때 하라. 조건파악중요한 조건들 1. plans의 길이는 1,000이며 O(N^2)으로 풀 수 있다. 2. 시간이 hh:mm과 같은 str으로 되어있다. 3. 시작시각은 모두 다르다. 따라서 정렬할 수 있다. 4. 나중에 미뤄진 것부터 다시 처리한다. 따라서 미뤄지면 처리 순서가 뒤집힌다. 5. 24시가 경과됨에 상관 없이 모든 과제는 끝낸다. - 문제에 명시되지 않음 접근마치 pipeline을 설계하는 듯한 문제이다. plans는 FIFO 즉 queue, 중간에 멈춘 과제들은 미뤄놨다가 LIFO(FILO) 즉 stack처럼 처리하면 되겠다. 두 개의 자료를 만들어 놓고 다음으로 처리할 과제는 queue이냐 stack이냐를 정..

[Python 문제 풀이] 프로그래머스 '광물 캐기'

Programmers Lv.2 파이썬 '광물 캐기' 풀이 및 코드마인크래프트..? 게임 설정 상 광물로 곡괭이를 만들 수 있으며, 더 좋은 재료로 만들어진 곡괭이일 수록 광물을 더 쉽게 채굴할 수 있다. 조건파악이 문제는 조건이 매우 중요하다. 1. 광물은 무조건 5개씩 연속으로 캔다. 2. 5개를 채굴할 때마다 곡괭이를 고른다. 어떤 곡괭이를 먼저 쓸 것인가? 순서대로 채굴해야 하기 때문에 minerals를 재정렬하는 것은 불가능하다. 하지만 5개 채굴시마다 곡괭이를 바꾸기 때문에 크기가 5인 청크로 묶는다면 서로 다른 청크는 서로 독립적이기 때문에 정렬을 수행해도 결과에 영향을 주지 않는다! picks는 원소가 3개 뿐이며, dia,iron,stone은 각각 해당 재료로 만들어진 곡괭이의 수를 의미한..

VS Code에서 WAS 실행하기 (Apache Tomcat)

웹개발은 당연히 테스트용 로컬 서버가 필요하다. 흔히 Eclipse, IntelliJ 등과 같은 IDE를 이용해 웹서버를 실행하고 앱 또는 페이지를 배포해 테스트한다. 한편, VS Code에서도 마찬가지로 익스텐션을 이용해 IDE처럼 서버를 실행할 수 있다. 애초에 IDE는 서버를 대체하는 것이 아니라 실행이랑 deploy만 대신해주는 거라 어렵지 않게 할 수 있다. 아무튼 이번 포스팅에서는 VS Code에서 톰캣을 실행하고 페이지를 배포하는 방법을 소개하겠다. 필요사항Apache Tomcat 다운로드 Apache Tomcat® - Welcome!The Apache Tomcat® software is an open source implementation of the Jakarta Servlet, Jaka..

could not resolve org.springframework.boot:spring-boot-gradle-plugin:x.x.x

could not resolve org.springframework.boot:spring-boot-gradle-plugin:x.x.x 스프링부트 이니셜라이저는 물론 IntelliJ에서 스프링 부트를 처음 사용해봤다. 스프링부트 이니셜라이저를 통해 IDE에서 빌드할 때 위와 같은 에러가 발생한다면, 시작부터 아무것도 안되는 것이다. 이럴 땐 아주아주 근본적인 문제일 가능성이 높은 법. Java가 설치되어있나? 스프링이니셜라이저를 생성할 때 선택한 Java의 버전과 동일한 버전에 설치되어 있는가? IDE에서 해당 버전의 Java 런타임이 선택되어 있는가?

[Python 문제 풀이] 프로그래머스 '리코쳇 로봇'

Programmers Lv.2 '리코쳇 로봇' 파이썬 코드 및 풀이 리코쳇 로봇이라는 보드게임에 나오는 유명한 알고리즘이다. 흔히 빙판길에서 목표지점까지 이동하는 형태로 옛날 고전게임 등에 퍼즐로 많이 등장한다. 조건파악 board의 크기 자체는 크지 않다. 그리고 ice slide 문제는 반복횟수가 그렇게 많지 않다. 접근 Ice Slide 문제는 BFS를 이용해 푼다! 탐색지점은 항상 상하좌우 방향의 네 곳이 된다. 각 방향의 탐색은 해당 방향으로 +1씩 계산하며 벽 또는 블럭이 나오기 직전 지점을 기록한다. 이동횟수가 적은 지점을 우선으로 하여 탐색을 반복하면 자연스럽게 BFS를 구형하게 된다. BFS와 별개로 각 방향을 탐색하기 위해 1차원탐색을 해야하기 때문에 구현이 조금 까다롭다. 의사코드 B..

[Python 문제 풀이] 프로그래머스 '혼자서 하는 틱택토'

프로그래머스 Lv.2 '혼자서 하는 틱택토' 파이썬 코드 및 풀이 조건파악 3x3 틱택토 게임인데 특별히 이 문제에서는 특정시점의 게임판만 보고 문제를 해결한다. 규칙대로 진행되지 않기 때문에 생각보다 논리력이 요구되는 문제인 것 같다. 3x3이기 때문에 코드 복잡도 측면에서 제한되는 부분은 딱히 없어 보인다. 접근 규칙대로 진행되지 않았다고 단정할 수 있는 몇 가지 케이스들이 있을 것이다. 그리고 이 문제는 해당 케이스들을 빠짐없이 확인하는 부분을 제대로 구현했느냐가 관건이다. 중간과정을 생략하더라도 반드시 지켜져야 하는 규칙과 그에 따른 반례를 다음과 같이 정리해보았다. 선공 후공 번갈아가며 진행되어야 하기 때문에 'O'의 개수는 'X'의 개수와 같거나 한 개 많아야 한다. 1. 순서를 지키지 않은 ..

[Python 문제 풀이] 프로그래머스 '미로 탈출'

ProgrammersLv.2 '미로 탈출' 파이썬 코드 및 풀이 대표적인 BFS문제, 근데 이제 경유노드를 곁들인 조건 파악 1. mpas는 최대 100x100이므로 N(max) = 10,000이다. 2. 경유노드(L:레버) 한 곳을 거쳐야 하므로 2N(max) = 20,000이며 시간복잡도 O(N)만에 풀면 된다. 접근 1. 최단경로를 구하기 위해 BFS로 푼다. 2. 경유노드가 있기 때문에 BFS를 두 번 한다. 의사 코드 시작점부터 L까지 BFS탐색 경로의 길이 저장 L부터 E까지 BFS탐색 최종 경로 반환 구현 from collections import deque def solution(maps): rows,cols = len(maps), len(maps[0]) r,c,distance = 0,0,..

반응형