전체 글
-
백준 25083번 (특수문자 출력)백준 with Python 2023. 1. 9. 16:04
컴퓨터는 앞에서부터 순서대로 읽기 때문에 예를 들어, ' 문자를 print(' ')내에서 출력하려는데 그냥 넣어버리면 컴퓨터가 print(' ' ')이렇게 읽어야 하는 걸 print(' ' ') 이렇게 읽어버려서 오류가 나기 때문에 print(" ' ")처럼 구분이 가게 해주거나 print(' \' ')처럼 ' 문자 앞에 \ 문자를 넣어주어 (이것은 출력하는 문자임)을 드러내준다. 다만 이제 \ 문자를 또 출력하기 위해서는 print(' \\ ')처럼 \앞에 또 \을 붙여주면 된다.
-
백준 1655번 (힙 자료구조와 heapq 모듈)백준 with Python 2023. 1. 7. 20:03
리스트를 만들고 요소가 들어올 때마다 정렬하고 중간값을 출력하는 알고리즘을 짜봤다. 잘 돌아가기는 했지만 돌아가는게 너무 오래걸려 오답이었다. 아무래도 출제자는 정렬로 푸는 것을 원하지 않는 모양이다. 빠르게 돌아가는 알고리즘을 만들기 위해서 힙을 사용했다. 힙이란 완전 이진 트리의 일종으로 최댓값이나 최솟값을 빠르게 찾아내기 위한 자료구조이다. 부모가 자식보다 큰 최대 힙과 부모가 자식보다 작은 최소 힙이 있다. heapq 모듈은 이런 힙 자료구조를 파이썬에서 이용하게 해준다. min heap을 이용하면 원소들은 항상 정렬된 상태로 삽입, 삭제되고 가장 작은 값은 언제나 인덱스 0에 위치한다. 그리고 그 뒤에 원소들은 왼쪽 자식 노드는 부모 노드*2, 오른쪽 자식 노드는 부모 노드*2 + 1로 계속 이..
-
백준 12865번 (냅색 알고리즘과 이차원 리스트 초기화)백준 with Python 2023. 1. 6. 17:53
여러가지 경우의 수로 주어진 무게 안에서 최고의 가치를 끌어내는 알고리즘을 만들어야만 했다. 처음에는 두개의 리스트나 딕셔너리로 모든 경우를 조합해서 그 중 무게가 허용되는 것 중에서 최고의 가치 를 가지는 조합을 뽑는 알고리즘을 만들어보려 했으나 실패했다. 그리고 이 문제는 냅색 알고리즘으로 풀어낼 수 있는 것을 알아냈다. 0 1 2 3 4 5 6 7 weight value 6 13 0 0 0 0 0 13 13 4 8 0 0 0 8 8 13 13 3 6 0 0 6 8 8 13 14 5 12 0 0 6 8 12 13 14 list[i][j] = list(value+knapsack[i-1][j-weight], list[i-1][j]) 냅색 알고리즘이란 물건의 수 N과 허용된 무게 K로 이루어진 리스트를 돌..
-
백준 2010번 (for문 _사용 및 sys입력)백준 with Python 2023. 1. 1. 21:51
매우 쉬운 문제. 입력 받아서 더해서 N-1을 빼주면 되는 문제다. 하지만 입력을 최대 500000번을 받아야 하기 때문에 input함수로는 시간초과가 되었다. import sys N=int(input()) sum=0 for _ in range(N): # _을 사용하면 반복문변수를 직접 사용하지 않는 반복문에서 유용하다. x=int(sys.stdin.readline()) sum+=x print(sum+1-N) sys모듈에는 인터프리터가 유지관리하는 변수와 함수들이 있다. 인터프리터란 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다. 간단하게 input()을 sys.stdin.readline()으로 대체해주면 된다. 여기서 드는 의문은 sys로 입력받는게 input보다 빠르..
-
백준 1408번 (문자열 연결, 숫자 출력 앞에 0 붙이기)백준 with Python 2022. 12. 28. 21:32
nh, nm, ns= input().split(':') sh, sm, ss= input().split(':') nt= int(nh+nm+ns) # 문자열을 편하게 더할 수 있다. st= int(sh+sm+ss) nh, nm, ns= map(int, (nh, nm, ns)) sh, sm, ss= map(int, (sh, sm, ss)) if nt>st: sh=sh+24 rh= sh-nh if sm 24:-1:59 이런 방식으로는 알고리즘이 너무 복잡해져 아예 새로 엎어 시 분을 모두 초로 옮기는 알고리즘을 새로 짰다. nh, nm, ns= map(int, input().split(':')) sh, sm, ss= map(int, input().split(':')) time=sh*3600+sm*60+ss-(n..