분류 전체보기

· Diary
이번에 새로운 시즌이 종료되면서 랜덤 마라톤이라는 시스템이 추가되었는데자신의 현재 티어에 맞게 완전히 랜덤으로 문제를 추천해준다. 기존에는 포인트 획득 경로가 매일 첫 문제 75점과 문제당 25점이라 모으기 쉽지 않았지만이번 마라톤 시스템은 포인트 보상을 달달하게 챙겨줘서 포인트 모으기가 수월해졌다. 언어 설정이 있는줄 모르고 일본어랑 영어 문제들을 번역기 써가며 다 풀고 보니작은 톱니바퀴 아이콘을 오늘에서야 봤다... 영어는 익숙해져서 나쁠게 없으니 다음 코스부턴 일본어만 제외하고 문제를 풀어봐야겠다. 사실 그래프, 백트래킹, 해쉬 같은 문제들만 좋아해서 그리디, DP 같은 것들에 약하긴 했는데매일 스트릭 유지도 하고 알고리즘 편식도 고칠겸 매주 완주를 목표로 해야겠다.
QClass// import static com.~.~.~.~.QCustomer.*;QCustomer customer = QCustomer.customer;QCustomer customer = new QCustomer("myCustomer"); 실제 도메인 클래스의 질의 타입으로 정적으로 사용하거나 별칭을 붙여 사용할 수 있다. 쿼리 사용해 보기JPAQuery query = new JPAQuery(entityManager);HibernateQuery query = new HibernateQuery(session); JPA와 Hibernate API를 모두 지원하기 때문에 위와 같이 둘 다 사용 가능하고두 클래스 모두 JPQLQuery 인터페이스의 구현체다.QCustomer customer = QCusto..
문제  접근 방식인접 리스트를 만든 후에 일반적인 그래프 탐색으로 여행 경로를 모두 이동해보면시간 초과가 발생하기 때문에 여행 경로가 모두 한 사이클에 포함 되는지만 파악하면 된다. 이럴 때 효율적인 알고리즘이 유니온 파인드인데유니온 함수를 이용해 연결된 정점들끼리의 부모를 기록해두고파인드 함수를 이용해 서로의 최고 조상이 누구인지 확인하여같은 사이클에 존재하는지 여부를 빠르게 판단할 수 있다. 초기에는 각 도시마다 자기 자신을 부모로 초기화하고주어진 도시 간의 경로를 유니온 함수로 연결한 후에여행 경로대로 파인드 함수를 사용해 모두 하나의 사이클에 포함되는지 확인한다. 풀이public class Main { static int[] parent; public static void main(String[]..
문제  접근 방식그래프 문제도 아니고 그냥 일반적인 반복문 문제라입력 받고 8방향 중 한 방향으로 4개의 알파벳들이 각각 O B I S인지 모두 확인해주면 된다. 문자 배열을 미리 만들어두고 비교를 했는데 목표 단어에 중복된 문자가 존재하지 않아서애초에 M을 1, O를 2, ..., S를 5로 두고 증가하는 순으로 비교하면 더 깔끔할거 같다. 풀이public class Main { static int n, cnt = 0; static char[] chars = new char[]{'O', 'B', 'I', 'S'}; static char[][] map; static int[] dx = {-1, -1, -1, 0, 0, 1, 1, 1}; static int[] dy = {-1, 0, 1, -1, 1, -1..
· Back-End
개요우선 처음 사용해보고 느낀 점은 초기 셋팅할 때 햇갈린거만 빼면 생각보다 어렵지 않다는 것이다. 워낙 유명한 툴이다 보니 인터넷에 정보도 많고 다양한 플러그인과 GUI 덕분에 처음 사용해보는 사용자도어려움 없이 사용할 수 있는거 같다. 물론 어느 정도 스크립트를 작성하긴 해야한다. 아마 이전에 Github Actions를 사용해본 사람이라면 스크립트를 짜는 것이 어렵진 않을거다. CI/CD Pipeline당장은 EC2 인스턴스는 Jenkins 서버용과 SpringBoot 서버용으로 두 개만 사용 중이고프로젝트가 어느 정도 완성되어 가면 추후에 아키텍처를 수정할 생각이다. Jenkins는 도커를 사용해 환경을 구성하는게 편해 해당 방식을 사용했고이후에 도커 이미지 빌드와 푸쉬를 위해 Docker를 사용..
문제 접근 방식문제가 너무 대놓고 그래프로 네 방향을 탐색하라고 나와 있는데 이거에 낚이면 시간초과에 걸린다. 장애물이 없는 지도가 주어져서 현재 지점의 좌표와 이동하고자 하는 지점의 좌표의 차를 구하면몇 칸을 이동해야하는지 알 수 있기 때문에 직접 한 칸씩 움직일 필요가 없다. 그래서 집의 좌표와 민초우유의 좌표만 구해두고 집의 위치에서부터 시작해서현재 좌표와 민초우유의 좌표의 차를 구하고 현재 체력보다 작거나 같다면 이동해주면 된다. 풀이public class Main { static int n, m, h, max = 0, milk = 0; static Pair home; static ArrayList milks = new ArrayList(); static boolean[] isVisited; pu..
문제 16928번: 뱀과 사다리 게임 첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으 www.acmicpc.net 접근 방식 여러 풀이가 존재하는 문제 같지만 BFS를 사용해서 풀어봤다. 우선 문제에서는 10*10 맵이라고 했지만 그냥 100칸짜리 1차원 배열을 사용하는 것이 문제의 입력 양식을 처리하기가 편해서 맵과 방문 배열을 모두 1차원 배열을 사용했다. 평범한 BFS 문제와 방식은 비슷하지만 주사위의 눈만큼 이동하기 위해 방향 배열을 사용하는 것이 아닌 1 ~ 6까지 반복문을 돌아주었다. 사다리나 뱀은 무조건 타야 하..
문제 11054번: 가장 긴 바이토닉 부분 수열 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000) www.acmicpc.net 접근 방식 바이토닉 수열인 오름차순, 내림차순, 오름차순 + 내림차순 수열 중 가장 긴 것을 찾아야 한다. 이전에 풀었던 문제 중 가장 긴 증가하는 부분 수열을 응용하면 풀 수 있는 문제인데 vvvvv 1521434521 만약에 위와 같은 수열이 있다면 1, 2, 3, 4, 5가 가장 긴 증가하는 부분 수열일 것이고 vvvvv 1521434521 가장 긴 감소하는 부분 수열은 위와 같을 것이다. 가장 긴 증가하는 부분 수열과 감소하는 부분 수열의 길이를 표로 정리하면 다음과 같..
da9dac
'분류 전체보기' 카테고리의 글 목록