처음에 간단하게 그냥 5로나누고 나머지를 2로 나눠서 나눠떨어지지 않으면 -1출력하면 되는거 아닌가? 했지만 당연히 아니다. 거스름돈이 13원인 경우 5원 한개 2원 4개로 거스름돈을 거슬러 줄 수 있다. 그럼 어떻게 해야할까? 최소한의 동전 개수로 거스름돈을 거슬러 줘야하므로 먼저 5로 나눠주고 cnt= 거스름돈 / 5 저장하고, 나머지 = n % 5 나머지가 2로 나눠지지 않는다면 나머지 += 5로 5원을 회수하고 cnt -= 1을 해준다. (동전 회수 했으므로 cnt도 감소해야함) 그리고 다시 5를 더한 나머지가 2로 나눠지는지 확인.... 위 과정 반복하다가 나머지에 계속 +5를 하다보면 주어진 거스름돈의 값을 넘기는 경우에는 -1을 출력하고 프로그램 종료 import java.util.*; im..
전체 글
EOF란? EOF는 End Of File의 약자로, 데이터 소스로부터 더 읽을 수 있는 데이터가없음을 나타내는 용어이다. 알고리즘 문제를 풀 때는 주로 입력값을 얼마나 받을지 명시하지 않을 경우 EOF를 사용함. 아래 문제 같은 경우 EOF 사용하여 문제 해결 https://www.acmicpc.net/problem/11034 11034번: 캥거루 세마리2 여러개의 테스트 케이스로 이루어져 있으며, 세 캥거루의 초기 위치 A, B, C가 주어진다. (0 < A < B < C < 100) www.acmicpc.net EOF 사용법 Scanner 클래스 사용할 경우 scanner 클래스는 hasNext() 메소드를 사용한다. hasNext()는 입력된 토큰이 있으면 ture를 반환, 아니면 false를 반환..
완전 탐색으로 첨탑 높이 비교 시도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..