완전 탐색으로 첨탑 높이 비교 시도1 import java.util.*; import java.io.*; public class Main{ public static void main(String[] args) throws IOException { //첨탑 개수 완전 탐색 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int[] data = new int[n]; st = new StringTokenizer(br.readLine()); for (in..
전체 글
1차 시도 import sys n = int(input()) lst = [0] * n idx = 0 b = True for _ in range(n): i, j = sys.stdin.readline().rstrip().split() for k in i: if k not in j: lst[idx] = -1 idx += 1 b = False break if b: b = True idx += 1 for i in lst: if i == -1: print("Impossible") else: print("Possible") not in을 사용해서 첫번째 문자열을 하나씩 뜯어서 두번째 문자열에 문자가 포함되는지 확인. 포함 안되면 lst에 테스트 케이스대로 인덱스를 설정(테스트 케이스가 첫번째이면 idx=0)해서 -1..
1차 시도 2점 import sys n, k = map(int, input().split()) data = [tuple(map(int, sys.stdin.readline().rstrip().split())) for _ in range(n)] idx = 0 data = sorted(data, key= lambda x:(x[0], x[1])) for i in range(n): if data[i][0] == 1: idx = i #남학생 시작 idx break w_lst = data[:idx] m_lst = data[idx:] w_grade = [] m_grade = [] for i in w_lst: w_grade.append(i[1]) for i in m_lst: m_grade.append(i[1]) cnt ..
Optional을 남용하면 오히려 성능이 저하된다. 1. Optional.get() 호출 전에 Optional 객체가 값을 가지고 있음을 확신 만약 빈 Optional 객체에 get()메소드를 호출한 경우 NosuchElementException이 발생 → isPresent()로 비어있진 않은지 먼저 확인하자 2. 값이 없는 경우, Optional.orElseGet()을 통해 이를 나타내는 객체를 제공할 것 orElse는 객체가 있는 경우에도 파라미터로 전달된 값이 실행되므로 orElseGet으로 객체가 없을 경우에만 실행되도록 하자 3. 값이 없는 경우, Optional.orElseThrow() 를 통해 명시적으로 예외를 던질 것 값이 없는 경우, 기본 값을 반환하는 대신 예외를 던져야하는 경우도 있다..
JPA로 개발하다가 JpaRepository로 find를 사용해서 객체를 조회하면 Optional로 감싸져서 반환되는걸 볼 수 있다. 왜 Optional로 반환하는게 좋은가? 궁금해서 찾아본 결과 예외 처리에 좋다고 한다. 근데 나는 Optional을 사용할 때랑 안할 때랑 try().. catch()로 예외를 처리해서 뭐가 좋은지 모르겠더라. 그래서 좋은 예외 처리를 찾아보기로 함. 먼저 Optional에 대한 개념에 대해 이해해보자 1. Optional이란? NPE(NullPointerException)은 개발할 때 가장 많이 발생하는 예외 중 하나이다. NPE를 피하려면 null 여부 검사를 해야하는데 null 검사를 해야하는 변수가 많은 경우 코드가 복잡해지고 "번거롭다." java8에서는 Opt..
트랜잭션이 끝나면 commit이 되면서 객체의 변경사항이 db에 반영된다. 하지만 트랜잭션 중간에 객체가 변하면 어떻게 될까? 중간에 객체가 변하면 바로 flush를 하나? 아니면 트랜잭션이 끝난후 commit과 flush를 할까 @Transactional public ReqUpdateDocDTO updateDoc(ReqUpdateDocDTO reqUpdateDocDTO/*사용자 정보*/) { //사용자 정보 토대로 reqUpdateDocDoc.fileName 으로 filepath 찾고 반환 Optional findDoc = docRepository.findById(reqUpdateDocDTO.getDocId()); List fileNames = new ArrayList(); Documents updat..
1 ≤ n ≤ 100000, 1 ≤ x ≤ 2000000 n은 입력받은 수열, x는 두 수열의 합 메모리 128MB 데이터의 개수가 1,000만 단위가 넘어가지 않도록... 1. itertools 라이브러리 사용해서 combination을 만들어서 x를 만드는 조합 개수를 찾자 -> 메모리 초과 (최대 10만 수열에서 2개 원소로 조합을 만들어서 리스트에 저장하면 대략 50억 가량의 데이터가 나옴.... from itertools import combinations import sys n = int(sys.stdin.readline().rstrip()) data = list(map(int, sys.stdin.readline().rstrip().split())) x = int(sys.stdin.readli..
사고 과정 # n
사고 과정 #난쟁이 키 도합 100 #100이 안되되로 7난쟁이 찾아보자 # 주어진 9개 중 7개 뽑아서 다 더해보자 -> 모든 경우의수 추려내자 # 9개중 7개 뽑기 -> 조합 조합 관련 내장함수 사용하자 from itertools imort combinations combinations(리스트, 뽑을 수) -> 리스트에서 뽑을 수만큼 조합을 만들어줌.