전체 글
(Python) 백준 1978번 - 소수 찾기
문제 링크 : https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 풀이 처음엔 단순하게 에라토스테네스의 체 방식으로 풀어서는 시간 초과가 날 수 있을거 같았으나 문제 분류에 에라토스테네스의 체라고 적혀있어서 시도해보았더니 제한 시간 내에 통과할 수 있었다. n = int(input()) count = 0 # 소수가 아닐 경우를 count arr = list(map(int, input().split())) for num in arr: if num == 1: # 1은 소수가 아님 count += 1 # 소수가 아니면 c..
(Python) 백준 1436번 - 영화감독 숌
문제 링크 : https://www.acmicpc.net/problem/1436 1436번: 영화감독 숌 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타 www.acmicpc.net 풀이 브루트포스 문제이다보니 실버 문제치고 풀이가 어렵지 않았다. i = int(input()) fin = 0 # 종말의 숫자 flag = 0 # 몇 번째 종말의 숫자인지 while i != flag: # 원하는 순서의 종말의 숫자에 도달할때까지 반복 fin += 1 # 0부터 하나씩 증가 시키기 if "666" in str(fin): # "666"과 비교를 위해 fin을 문자열로..
(Python) 백준 1181번 - 단어 정렬
문제 링크 : https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 풀이 arr = [] for _ in range(int(input())): m = input() if m in arr: continue if len(arr) == 0: arr.append(m) for i in range(len(arr)): if len(arr[i]) > len(m): arr.insert(i, m) break elif len(arr[i]) == len(m):..
계수 정렬
계수 정렬이란? 카운팅 정렬 (Counting Sort)이라고 부르기도 하는 계수정렬은 O(n)의 시간복잡도를 가지는 정렬이다. 최댓값과 입력 배열의 원소 값 개수를 누적합으로 구성한 배열로 정렬을 수행한다. 계수 정렬의 특징 주어진 데이터의 범위가 작은 경우 빠른 속도를 갖는 정렬 알고리즘이다. 0과 양수 범위의 데이터들만 정렬할 수 있다. 데이터의 범위가 커지게 되면 소요되는 시간이 커지게 되고, 메모리가 낭비되는 문제가 발생한다. 또한 음수 범위의 데이터들은 정렬할 수 없다는 단점을 가진다. 계수 정렬의 과정 정렬되지 않은 수들을 count 배열에 몇 번씩 등장하는지 적어둔다. count 배열을 앞에서부터 순회하며 등장 횟수를 누적합으로 변경한다. 기존의 배열의 뒤에서부터 누적합 결과를 인덱스로 사..
(Python) input() vs sys.stdin.readline()
백준 문제를 풀 때 Input()을 사용하면 시간 초과가 발생하고, sys.stdin.readline()을 사용하면 시간 안에 채점이 완료되는 경우가 여러 번 있어서 이 둘의 차이를 명확하게 정리하고자 한다. 이 두 함수가 동작하는 모습을 보면 기능은 비슷하다고 생각할 수 있지만, 명확한 차이점이 존재한다. 1. input() 파이썬의 내장함수로써, 인수로 prompt message를 받을 수 있다. 2. sys.stdin.readline() sys 모듈의 메소드로써, 인수로 prompt message를 받지 않는다. 3. 차이점 (1) 위에서 언급했듯이 input()은 인수로 prompt message를 받고, 이를 출력한다. 반면 sys.stdin.readline()은 아무런 인수를 받지 않기 때문에..
(Python) 백준 10989번 - 수 정렬하기 3
문제 링크 : https://www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 원래 브론즈 문제는 포스팅하지 않으려 했으나 문제와 관련하여 정리할 개념들이 많이 있어서 풀이를 적어보려고 한다. 메모리 제한과 시간 제한이 있어 단순하게 python의 sort함수로는 이 문제를 풀 수 없어서 계수정렬을 이용하여 풀었다. count = [0] * 10001 for _ in range(int(input())): count[int(input())] += 1 for i in range..
[ToDo List using JPA] 2. Todo List 구현
1. 기본 설정 ToDo List 프로젝트의 기본 설정을 위한 작업들이다. // build.gradle dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.h2database:h2' compileOnly 'org.projectlombok:lombok:1.18.24' runtimeOnly 'com.h2database:h2' ann..
[Spring] 영속성 컨텍스트와 @Transactional 어노테이션
들어가기에 앞서 스프링 Todo List 프로젝트 중 JPA의 Dirty Checking 기능이 작동하지 않아 이유에 대해 함께 프로젝트를 진행 중이던 팀원에게 물어보니, @Transactional을 Update Service에 붙이지 않아서 Dirty Check가 이루어지지 않았다는 사실을 알려주었다. 단순히 @Transactional은 오류 발생 시 롤백을 위함으로 알고 있던 나에게는 충격으로 다가왔다. 그렇기에 @Transactional 어노테이션에 대해 제대로 정리를 해야겠다는 생각을 하게 되었다. @Transactional과 영속성 컨텍스트에 대해 알아보기 전에 먼저 JPA의 Dirty Checking 기능에 대해 알아보겠다. JPA Dirty Checking JPA는 Entity Manager..
[Spring] Open-In-View란?
Open-In-View는 Open-Session-In-View 또는 Open-EntityManager-In-View라고 불리기도 한다. Default값은 true이며, 이 경우에는 영속성 컨텍스트가 트랜잭션 범위를 넘어선 레이어까지 살아있다. API에서는 클라이언트에게 응답될 때까지, View에서는 View가 렌더링될 때까지 영속성 컨텍스트가 살아있다. 아래처럼 application.properties에서 false로 설정해주었다면, 영속성 컨텐스트는 트랜잭션을 종료할 때 같이 닫히게 된다. spring.jpa.open-in-view=false 위 그림은 OSIV(Open-Session-In-View)가 True일 때를 보여준다. 위 그림은 OSIV(Open-Session-In-View)가 False일 ..
[ToDo List using JPA] 1. CRUD와 JPA란?
CRUD란 ToDo List를 만들기에 앞서 CRUD에 대한 개념을 알아보고자 한다. CRUD는 컴퓨터 소프트웨어가 데이터를 다루는 가장 기본적인 방법 4가지를 의미한다. 각각 Create, Read, Update, Delete의 앞글자를 묶어서 일컫는 말이다. 1. Create (생성) 새로운 데이터를 생성하고, DB의 테이블에 이를 저장하는 것이다. SQL문의 Insert에 해당한다. 2. Read (읽기) DB의 테이블에 저장된 데이터를 읽어오는 것이다. SQL문의 Select에 해당한다. 3. Update (갱신) DB의 테이블에 저장 되어있는 데이터를 변경하는 것이다. SQL문의 Update에 해당한다. 4. Delete (삭제) DB의 테이블에 저장된 데이터를 삭제하는 것이다. SQL문의 De..