분류 전체보기 29

[Python] 문자열 리스트를 정수 리스트로 변환

Problem 문자열로 이루어진 리스트를 정수 리스트로 변환하기 str_list = ['1', '2', '3', '4'] Solution map()함수를 사용한다. map(function, iterable) 함수는 각 요소에 function을 적용하고, 반복자를 반환한다. 따라서 str_list에 적용하려면 map함수를 적용한 다음, list함수를 통해 리스트로 변환하면 된다. str_list = ['1', '2', '3', '4'] int_list = list(map(int, str_list)) print(int_list) [1,2,3,4] 두 번째 방법은 파이썬 식 리스트 생성이다. str_list의 요소를 하나씩 읽어 int로 변환하고, 해당 요소를 리스트에 추가하면 된다. 로직은 다음과 같다. s..

Python 2022.03.24

[Django] 500 Internal server error handler

Problem http 500 서버 에러 발생 시의 처리 로직을 구현. Solution 이미 구현되어 있는 django.conf.urls.handler500 을 이용한다. django.conf.urls.handler500 에 view의 함수를 지정해주고, view에서 에러 관련 처리를 해준다. *urls.py* import django.conf.urls django.conf.urls.handler500 = "apps.views.error500" 필자는 에러 정보를 slack bot을 통해 송신한 다음 에러 페이지를 출력하는 로직을 구현하였다. 발생한 에러는 traceback.format_exc()를 사용해 저장하면 된다. err_str = traceback.format_exc() *views.py* de..

Django 2022.02.14

[Python] 두 딕셔너리의 합 구하기

Problem a = {'a': 1, 'b': 2, 'c': 3} b = {'a': 2, 'd': 4} 일때, a와 b를 합친 값 c = {'a': 3, 'b': 2, 'c': 3, 'd': 4} 을 구하고자 한다. 같은 키가 존재하면 연산을, 키가 존재하지 않으면 병합하는 과정이 필요하다. Solution collections.Counter를 사용하면 된다. 단, 모든 value 값은 int 형이어야 한다. from collections import Counter a = {'a': 1, 'b': 2, 'c': 3} b = {'a': 2, 'd': 4} c = Counter(a) + Counter(b) #출력결과 Counter({'a': 3, 'b': 2, 'c': 3, 'd': 4}) 만약 딕셔너리를 ..

Python 2022.02.08

[백준온라인저지/BOJ] 2775번 부녀회장이 될테야

문제 풀이 해당 아파트 호수당 거주 인원을 표로 나타내면 다음과 같다. 해당 표를 통해 k층 n호에 거주하는 인원을 파악할 수 있는 규칙을 알 수 있다. K층 N호 = K층 (N-1)호의 인원 + (K-1)층 N호의 인원 인 것을 알 수 있다. 0층은 호수대로 거주하고, 모든 층의 1호는 1명만 거주하므로 위 법칙을 이용하여 K층 N호의 거주 인원을 구할 수 있다. 따라서 이를 코드로 구현하면 다음과 같다. import java.util.Scanner; public class Main { public static void main(String args[]){ Scanner scanner = new Scanner(System.in); int T; T = scanner.nextInt(); int[] k = ..

BOJ 2022.01.27

[백준온라인저지/BOJ] 10250번 ACM 호텔

문제 풀이 층이랑 호수를 자꾸 헷갈려서 오래 걸린 문제이다. H = 호텔의 층수 W = 호텔의 한 층당 호수 N = N번째 손님 일때, 경우의 수는 총 3가지이다. 1) H와 N이 같거나 H가 N보다 더 클 경우. 호수는 무조건 1호로 고정된다. 2) N%H가 0일 경우. 층수에 맞게 들어오므로 H층 N/H호에 들어오게 된다. 3)그 외(N이 H보다 큰 경우) N%H 층 N/H호에 들어오게 된다. 그리고 만약 호수가 1자리 수라면 호수 앞에 0이 붙어야 한다. ex) 12층 4호인 경우 1204 따라서 이를 코드로 구현하면 다음과 같다. import java.util.Scanner; public class Main { public static void main(String args[]){ Scanner ..

BOJ 2022.01.26

[백준온라인저지/BOJ] 2869번 달팽이는 올라가고 싶다

문제 풀이 낮에는 A미터를 올라가고, 밤에는 B미터를 미끄러지므로, 하루에 올라가는 높이는 A-B 미터이다. 단, 정상에 도달할 경우엔 미끄러지지 않으므로 올라가야할 총 높이는 V-B 미터라고 할 수 있다. 따라서 총 높이/하루당 올라가는 높이 를 구해 올림처리 해주면 며칠이 걸리는 지 알 수 있다. 코드로 구현하면 다음과 같다. import java.util.Scanner; public class Main { public static void main(String args[]){ Scanner scanner = new Scanner(System.in); int A,B,V, day; double totalMoveMeter, dayPerMove; A = scanner.nextInt(); B = scanne..

BOJ 2022.01.25

[백준온라인저지/BOJ] 1193번 분수찾기

문제 풀이 필자의 경우 분수의 규칙을 찾아 문제를 해결했다. 첫 번째로 주목해야 할 부분은 첫 번째 열이다. 첫 번째 열의 인덱스를 나열하면 1, 3, 4, 10, 11 인데, 증가하는 값을 보면 2, 1, 6, 1, 10, 1... 순으로 값이 증가함을 알 수 있다. 2부터 짝수번째 차례엔 이전 짝수번째 증가값에 4를 더한 값이, 홀수번째 차례엔 1씩 증가함을 알 수 있다. 두 번째로 주목해야 할 부분은 첫 번째 열 인덱스의 수 증감패턴이다. 1이 증가한 홀수번째 차례 이후에는 인덱스가 대각선으로 1씩 증가하고, 4가 증가한 짝수번째 차례 이후에는 인덱스가 대각선으로 1씩 감소함을 알 수 있다. ex) 인덱스가 3일 경우, 홀수번째 차례이기 때문에 1 증가. 인덱스는 4가 되고 대각선으로 1씩 증가하여..

BOJ 2022.01.25

[백준온라인저지/BOJ] 2292번 벌집

문제 풀이 핵심은 벌집의 규칙이다. 방을 지나가는 수를 Depth라고 가정. 0~1 -> Depth = 1 2~7 -> Depth = 2 8~19 -> Depth = 3 20~37 -> Depth = 4 ... 범위의 끝 숫자를 이어보면 1, 7, 18, 37, 61... 이며 6, 12, 18, 24... 만큼 값이 증가함을 알 수 있다. 따라서 6씩 증가하는 addNum 값을 더해주고, 더할 때마다 cnt 값을 증가시키면 Depth를 구할 수 있다. 단, 시작과 끝을 포함하므로 cnt는 1부터 시작한다. import java.util.Scanner; public class Main { public static void main(String args[]){ Scanner scanner = new Sca..

BOJ 2022.01.25

[백준온라인저지/BOJ] 1712번 손익분기점

문제 풀이 A = 원금 B = 물건 생산 비용 C = 물건 판매 비용 문제의 핵심은 물건판매 순이익으로 원금을 메꾸는 것이다. 순이익 = 물건 판매 비용 - 물건 생산 비용 = C - B 원금 = A 따라서 원금을 순이익으로 나눈 몫에 1을 더해주면 해당 값이 손익분기점을 넘어선 값이 된다. -> (A/(C-B)) + 1 만약, 물건 판매 비용보다 물건 생산 비용이 더 크거나 같을 경우, 이익을 낼 수 없으므로 -1을 출력한다. -> C

BOJ 2022.01.25