목록Java (49)
복's
📌 의존성 추가먼저 엑셀 라이브러리 Apache POI 의존성 추가를 해주었다.implementation group: 'org.apache.poi', name: 'poi', version: '5.2.3'📌 엑셀 파일 다운로드Docs 에 전부 나와있기 때문에 따로 검색할 필요 없이 쭉 훑으면서 하나씩 진행할 예정이다.뭐... 말해 뭐하나 바로 엑셀 파일부터 만들어보자.public void downloadBasicExcelFile() throws IOException { Workbook wb = new HSSFWorkbook(); Sheet sheet1 = wb.createSheet("Hello World!!!"); try(OutputStream fileOut = new FileOutpu..
https://www.acmicpc.net/problem/11404 플로이드 워셜(Floyd-Warshall) 알고리즘을 접하게 되어서 알고리즘 연습을 위해서 찾다가 풀게된 문제다.예전에 문제를 풀 때 다익스트라 알고리즘은 음의 가중치를 해결하지 못해서 고민하다가 이름만 기억하고 있다가 기회가 왔을 때 문제로 연습 하였다.[ 📌 풀이 ]그래프 구성다른 그래프 문제와 동일하게 출발 -> 도착 (비용) 을 기록할 수 있도록 구성한다.플로이드 워셜 알고리즘경유 노드를 정해서 다른 노드가 지나가면서 INF 로 설정했던 경로를 도달할 수 있는지 체크한다.V^3 시간 복잡도를 갖고, V^2 의 공간 복잡도를 갖기 때문에 불필요한 연산을 최소로 한다.출력 값 포맷 맞춰주기문제에서 요구하는 출력 방식을 맞춰준다. (..
사이드 프로젝트를 준비하려고 하는데, 주제는 아직 정하지 않았지만 스크래핑을 이용한 무언가를 하고 싶다고 생각했고, 예전에 스터디할 때 사용했던 Selenium 을 사용하려고 합니다. 👉 예정중인 스텝스크래핑 가능한 환경설정 구성스크래핑 실습하기 (원하는 데이터 뽑기 위해서)스크래핑한 데이터 엑셀 파일로 생성DB 저장하기 후 Thymeleaf 로 화면 구성스케줄링을 통해서 특정 시간에 스크래핑 본격적으로 프로젝트 하나 들어가기전에 이렇게 프로젝트 가볍게 구성해서 연습 하려고 합니다. 📌 Spring 프로젝트 생성하기스프링 프로젝트를 구성하는데 버전은 딱히 신경쓰지 않아도 될 것 같습니다. 📌 Selenium 의존성 추가하기https://mvnrepository.com/artifact/org.sele..
Java 를 사용해서 일을 시작하게 되면서, 소스 코드 리딩을 하고 있는데 서버 사이드에 있는 코드들에 String Literal 연산이 많이 보여서 의문을 가지게 되었다. 의문의 시작은 내가 알고 있는 String 에 대한 기본 지식들에서 시작하는데기본적으로 String Literal 은 value 가 같다면 String Constant Pool 에 존재하고, 같은 값은 가지는 String 들이 같은 주소를 참조하고 있다는 것이다. (이름이 참 많다 => String Pool, String Literal Pool, String Constant Pool) 📌 내가 Java 에서 String 을 다룰 때 기본적으로 기본적으로 생각하는 개념test1과 test2는 equals() 를 사용하지 않아도 같은 ..
https://www.acmicpc.net/problem/5014 5014번: 스타트링크 첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다. www.acmicpc.net 문제의 본질은 최단거리를 구하는 문제로 그래프 탐색중에서 BFS 알고리즘을 사용해서 푸는 문제다. [ 📌 풀이 ] 일반적인 BFS 로직에 조건 하나 추가 해주면 된다. 조건: 타겟으로 하는 층에 도달할 시 종료 [ 📌 주의 사항 ] 목표로 하는 층 보다 높아지거나 낮아 지는건 조건에서 필요 없다. 목표 층을 넘어가도 다시 내려가거나 올라가면 도달하는 최단거리가 있음 다음 층을 연산할 때 인덱스를 넘기면 안된..
https://www.acmicpc.net/problem/1068 1068번: 트리 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다 www.acmicpc.net 트리가 주어지고 그래프를 구성해서 그래프 탐색 알고리즘을 사용해서 푸는 문제이다. 목표는 리프 노드의 개수를 구하는 것이고, 고려 조건은 단 1개로 1개의 지워지는 노드가 있다는 점이다. [ 📌 풀이 ] 루트 노드를 기록해두었다. (탐색 시작 기준을 정하기 위해서) 지워지는 노드가 있기 때문에 임의의 노드를 기준으로 탐색을 하게되면 안된다. 지워지는 노드는 그래프에 넣지 않았다. 지워지는 노..
https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 물 수위에 따라서 수면에 잠기지 않은 붙어있는 영역을 구하는 문제로 간략하게 설명할 수 있을거 같다. 그래프 탐색 알고리즘을 사용해서 문제를 접근했다. [ 📌 고려사항 ] N은 2 이상 100 이하 -> 지역의 총 크기는 100 * 100이 최대 사이즈다. H(높이)는 1이상 100 이하 -> 최대 101번의 높이에 대해서 실행해야 한다. [ 📌 풀이 ] 1. 입력받은 영역들 중에가 가장 높은 지대의 높..
https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 3번째 풀면서 익숙해져버린 문제 스택을 이용하는 문제인데 다른 알고리즘 보다도 스택을 사용하는 어려운 문제가 진짜 힘든 것 같다. [ 📌 풀이 ] 일반적인 완전 탐색의 방법으로는 시간 초과가 나는 문제다. 탑의 개수가 500,000 개까지 들어오는데 매번 탑이 스택에 들어올 때 마다 확인 하는건 좋지 않다. 주어진 규칙을 활용하자. ◀︎⎯⎯⎯⎯⎯⎯🀆 🀆 🀆◀︎⎯⎯⎯︎⎯⎯⎯⎯⎯⎯⎯🀆 ◀⎯🀆 🀆 🀆..
https://www.acmicpc.net/problem/2504 2504번: 괄호의 값4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 Xwww.acmicpc.net생각을 많이 하게되는 문제였다.여러가지 시도를 해보고 제일 마음에 드는 풀이를 찾았다.[ 📌 풀이 ]두 가지의 로직이 동작 한다.괄호가 완벽한지 체크하기 위한 로직ex) ()[]() -> Okex) ()[[() -> Not Ok값을 누적 시키는 로직조건을 만족 시키는 상황에서 값을 더해준다.치환 시킨 숫자가 들어오는 경우설명으로는 충분하지 않은데....설명에 비해서 코드는 쉽다고 생각된다.[ ?..
https://school.programmers.co.kr/learn/courses/30/lessons/12904 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 파이썬으로는 해결이 빠르게 되었는데, 자바로 풀려고 하니까 String을 사용하면 시간 초과가 날 것 같았다. 아니나 다를까 시간 초과가 여러번 발생했고, 코드 수정도 그에 따라서 여러번 진행 했다. 결론만 말하면 자바로 문제를 풀이할 때 StringBuilder의 reverse()를 사용하면 통과 할 수 없었다. 시도하지 않았지만 substring()도 당연히 안될걸로 생각 된다. 그래서 배열로..