전체 글(223)
-
19238 - 스타트 택시
처음에 택시와 가장 거리가 가까운 승객을 찾는 함수인 saveDistance를 승객별로 BFS를 실행시켜 구했다. 그렇게 하면 역시나 시간초과가 난다. 이전에도 몇번 이런식으로 풀었던거 같은데 한 그래프 안에 2개 이상의 위치에 대한 각각의 최소 거리를 구하거나, 횟수를 구할때는 한번의 BFS로 동시에 구할 수 있다. 이런 생각을 하지 못하다가 힌트를 얻기 위해 여기저기 블로그를 찾다가 이에대한 힌트를 얻었다. saveDistance가 처음에 짰던 그래프 상의 최소 거리를 구하는 함수이다. 그리고 saveDistanc2가 한번의 BFS만으로 어떤 위치든 벽을 제외한 모든 곳의 특정 위치로부터의 거리를 구할 수 있는 함수이다. saveDistance의 경우에는 승객과 택시와의 최소 거리를 모두 구해 어느 ..
2022.08.25 -
17142 - 연구소3*
이번 문제는 시간초과만 주구장창 나오다가 결국 다른 여러 사람들의 풀이를 참고해본 문제이다... # 가장 처음 바이러스는 비활성 # 활성 상태인 바이러스는 상하좌우로 인접한 모든 빈 칸으로 동시 복제 : 1초 # 바이러스 M개를 활성 상태로 변경 # 모든 빈 칸에 바이러스를 퍼뜨리는 최소 시간 from copy import deepcopy N, M = map(int, input().split()) graph = [] for _ in range(N): tmp = list(map(int, input().split())) graph.append(tmp) minTime = 1000000000 timeList = [] visited = [[False for _ in range(N)] for _ in range(N..
2022.08.16 -
16235 - 나무재테크
하... 이 문제는 39번 시도 끝에 통과한 문제다. 극히 일부만 캡쳐했지만 하다하다 오기가 생겨서 계속 시도하다 보니 이렇게까지 제출 횟수가 늘어났던것 같다. 42%에서 시간초과가 계속 나오는 것을 보고 이래저래 고치다보니 틀렸습니다가 나오기는 했지만 ㅎㅎㅎ 그래도 다양한 반례를 테스트 해보면서 로직상의 문제는 크게 없다는 것을 깨달았다. 시간초과가 문제였을 뿐... 어쨌든 하다가 너무 짜증나서 다른 사람의 풀이를 봐야지 하다가 하나의 차이점을 발견했다. copyTreeAge =deepcopy(treeAge[nr][nc]) copyTreeAge.appendleft(1) treeAge[nr][nc] = copyTreeAge 나는 위의 코드처럼 깊은 복사를 해주어야만 appendleft를 해도 treeAg..
2022.08.07 -
AOP - AOP가 필요한 상황
AOP가 필요한 상황 모든 메소드와 호출 시간을 측정하고 싶은 경우 공통 관심 사항(cross-cutting concern) VS 핵심 관심 사항(core concern) 회원 가입 시간, 회원 조회 시간 측정하고 싶은 경우 예시 만약 각 메서드의 실행 소요 시간을 알고싶다고 하면, 여러가지 문제점이 생긴다. 회원가입, 회원조회 등의 메소드는 핵심 관심 사항인데 비해, 시간을 측정하는 로직은 공통관심사항이다. 핵심 비즈니스 로직과 시간측정 로직이 섞이면 유지보수 및 변경이 어렵다. 시간을 측정하는 로직을 별도의 공통 로직으로 만들기는 어렵다. 따라서 이렇게 시간 측정 로직을 핵심 비즈니스 로직에 붙여서 사용하는 것이 아니라, 시간 측정 로직을 한 곳에 모두 모아 내가 원하는 곳에 적용하는 방법을 사용한다..
2022.08.06 -
스프링 DB 접근 기술- 스프링 데이터 JPA
스프링 부트와 JPA 기반 위에 스프링 데이터 JPA 프레임 워크 : JPA를 편리하게 사용하도록 도와주는 기술 스프링 부트와 JPA만 사용해도 개발 생산성이 많이 증가되고, 개발해야하는 코드도 확연히 줄어들게 된다. 여기에 스프링 데이터 JPA를 사용하면, 기존의 한계를 넘어서 리포지토리 구현 클래스 없이 인터페이스 안으로 개발을 완료할 수 있게된다. 또한 반복 개발해왔던 CRUD 기능도 스프링 데이터 JPA가 모두 제공한다. * 실무에서 ERD를 사용한다면, 스프링 데이터 JPA는 필수이다. 인터페이스를 통한 기본적인 CRUD 기능 제공 findByName(), findByEmail() 처럼 메서드 이름만으로 조회 기능 제공 페이징 기능 자동 제공 SpringDataJpaMemberRepository..
2022.08.06 -
스프링 DB 접근 기술- JPA
JPA JDBC에서 JDBC Template으로 바뀌면서 개발자가 작성해야하는 반복된 코드는 확 줄었지만 SQL은 직접 모두 작성해야했다. 그런데 JPA는 이런 기본 SQL도 직접 만들어서 실행해준다. 또한 SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있다. 따라서 개발 생산성을 높일 수 있게된다. 마치 객체를 메모리(memoryMemberRepository)에 넣듯이 JPA가 중간에서 DB에 SQL을 날리고, DB에서 데이터를 가져오는 것을 처리한다. JPA 라이브러리 추가 및 설정 Entity 맵핑 JPA는 인터페이스만 제공이 되는 것이다. hybernate, eclipse 등이 구현 기술이 된다. 즉, JPA 인터페이스에 hybernate만 사용한다고 생각해도 무방하다...
2022.08.05