728x90

전체 글 270

백준 11055 <가장 큰 증가하는 부분 수열> Python

https://www.acmicpc.net/problem/11055 11055번: 가장 큰 증가하는 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가하는 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가하는 www.acmicpc.net 전형적인 LIS 알고리즘 문제입니다. 문제 시간이 넉넉해 DP 를 사용해 풀어주면 됩니다. 기본 아이디어는 현재 인덱스에서 거꾸로 인덱스를 줄여가며 현재 값보다 작은 값이 있다면 수열의 수를 더해주는 방식을 취했습니다. def solution(n, data_list): # 인덱스 맞춰주기 data_list = [0] + data_list..

백준 2193 <이친수> Python

https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않 www.acmicpc.net 경우의 수를 나누는 기준만 잘 세우면 쉽게 풀 수 있는 문제입니다. def solution(n): # DP memo = [0 for _ in range(91)] # 앞 부분 미리 작성 memo[1] = 1 memo[2] = 1 i = 3 while True: # 중단 조건 if i >= n+1: return memo[n] # 맨 앞은 10 으로 고정되어 있음 # 그 뒤를 생각해야 하는데..

백준 11727 <2Xn 타일링 2> Python

https://www.acmicpc.net/problem/11727 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net https://dev-diary-0717.tistory.com/26 BaekJoon 11726 https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방 dev-diary-0717.tistory.com 2xn 타일링 문제의 연장선상에 있는..

동기 Vs 비동기

동기 동기 방식은 서버에 요청을 보내고 요청이 끝나면 다음 동작을 실행하는 방식입니다. 순서에 맞추어 진행되어 코드를 구성하거나 제어하기 쉽습니다. 하지만 여러가지 요청을 동시에 처리할 수 없어 효율이 떨어집니다. 비동기 비동기 방식은 서버에 요청을 보낸 뒤 요청이 끝나기 기다리지 않고 다음 요청을 바로 실행하는 방식입니다. 작업을 기다릴 필요없이 동작하기 때문에 자원을 효율적으로 사용할 수 있습니다. 하지만 작업이 완료된 결과를 제어하기 어렵습니다. 예를 들어 A 의 결과를 B 에서 사용하는 경우 A 와 B 가 동시에 실행되면 B 에서 오류가 날 수 밖에 없습니다. 또 비동기 요청의 응답을 처리할 콜백 함수를 함께 설정하게 되는데, 여러 개의 콜백함수가 중첩되어 콜백 헬이 발생하는 단점이 있습니다. 또..

백준 1932 <정수 삼각형> Python

https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 전형적인 DB 문제입니다. 위에서부터 아래로 점점 더해가며 비교하면 쉽게 풀 수 있습니다. def solution(n, data_list): # DP memo = [[0]*(i+1) for i in range(len(data_list))] # 최상단 채워주기 memo[0][0] = data_list[0][0] # 아래로 내려가면서 더함 # n 층에서 n+1 층으로 더함 for i in range(n-1): for j in range(len(data_list[i])): ..

백준 12852 <1로 만들기 2> Python

https://www.acmicpc.net/problem/12852 12852번: 1로 만들기 2 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 자연수 N이 주어진다. www.acmicpc.net '1로 만들기' 와 같은 풀이지만 역산하며 경로를 출력하는 과정이 추가되었습니다. https://dev-diary-0717.tistory.com/20 BaekJoon 1463 https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net DP 알고리즘의 전형적인 문제입니다. 어떤 조건에서 이전 단계와 dev-diary-0717.tistory.com def solution..

아스키 코드 Vs 유니코드 Vs UTF-8

아스키 코드 아스키코드(ASCII)는 128개의 문자로 이루어진 7비트 부호입니다. 알파벳, 숫자, 특수기호와 컴퓨터에 필요한 몇 가지 문자만 정의되어 있습니다. 출처 - https://velog.io/@exploit017/%EC%95%84%EC%8A%A4%ED%82%A4-%EC%BD%94%EB%93%9C%ED%91%9C 유니코드 점점 여러 나라에서 컴퓨터를 사용하다 보니 아스키코드만으로는 문자들을 표현하기 부족해져서 만들어진 코드 체계입니다. 숫자와 글자가 1:1 로 매핑되는 형태를 가지고 있습니다. 16비트를 표현해 최대 65536자를 표현 가능하며 영문, 숫자, 한글, 한자 등 모든 글자는 이론적으로 2 바이트를 띄고 있습니다. 다만 일부 문자는 2바이트를 초과할수도 있습니다. UTF-8 유니코드를..

백준 11726 <2Xn 타일링> Python

https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 어떤 경우의 수로 나눠서 풀어야할지만 생각하면 간단하지만 이를 생각하기가 어려운 문제였습니다. 마지막에 오는 타일의 모양을 생각하면 쉽게 풀 수 있습니다. def solution(n): # DP memo = [0 for _ in range(n+1)] # 2까지만 채우기 memo[1] = 1 if n == 1: return memo[1] memo[2] = 2 # i 번째 맨 뒤가 = 모양이면 # (i-2) 가지 이고 #..

백준 11659 <구간 합 구하기 4> Python

https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 누적합 알고리즘을 알고있다면 간단한 문제였습니다. def solution(N, M, num_list, data_list): # 누적합 리스트 만들기 sum_list = make_sum_list(N, num_list) # i ~ j 구간의 합은 (j 까지의 누적합) - (i-1 까지의 누적합) for i, j in data_list: print(sum_list[j] - sum..

Call By Value Vs Call By Reference

Call By Value 개념 함수에서 변수를 호출할 때 값을 직접 호출하는 방식입니다. 호출되는 순간 메모리 공간에 이를 위한 임시 공간이 생성되고 변수의 값을 복사하여 바로 전달합니다. 복사된 값은 함수 안에서 로컬 변수의 특성을 가지게 되며 함수 안에서 값이 변경되어도 외부 변수의 값은 변경되지 않습니다. def add_int(a, b): a += b return a a = 10 b = 15 sum_ab = add_int(a, b) 위와 같은 방식으로 함수를 정의했다고 생각하겠습니다. a 의 값에 b 를 더한 뒤 a 를 리턴해주는 방식으로 구성되어있는데, 단순히 a 와 b 의 값을 불러와서 함수에 사용했으므로 함수 안에서 a 가 변경되어도 변경사항이 외부의 a 에 적용되지 않습니다. Call By ..

728x90