본문 바로가기
728x90
반응형

python17

[백준/Python] 1316 그룹 단어 체커 문제: https://www.acmicpc.net/problem/1316  사용 알고리즘: 없음 -> 구현  ccazzzzbb -> 그룹단어 okin -> 그룹단어 oaabbbccb -> 그룹단어 x 문자열이 1개 이상 연속해서 나타나고, 나타났던 문자가 따로 떨어져서 나타나면 그룹 단어가 아님!  어떤식으로 나타났던 문자의 중복 체크를 해줘야할까 하다가 딕셔너리를 떠올렸다. (왜인지는 나도 모름)단어를 입력받고 { key : value } 를 각 문자를 순서대로 { 문자 : 인덱스 } 로 저장하면 문자의 마지막 등장 인덱스가 저장되는데, 이를 이용해서 그룹 단어인지 체크하면 된다.  예를 들어 happy 라는 그룹 단어를 입력 받았다면 아래와 같이 딕셔너리에 저장된다. dic = {'h': 0, 'a.. 2024. 7. 16.
[백준/Python] 11659 구간 합 구하기 4 문제: https://www.acmicpc.net/problem/11659  사용 알고리즘: 누적 합  입력수의 개수 N ( 1 ≤ N ≤ 100,000 )합을 구해야 하는 횟수 M ( 1 ≤ M ≤ 100,000 )N 개의 수M 개의 i, j 쌍 만약 이 문제를 파이썬 내장함수인 sum 을 사용해서 푼다면 시간초과로 실패한다.  sum 함수의 시간 복잡도는 O(n) 이고 M 개의 i,j 쌍의 구간 합을 구하기 위해 for 문을 M 번 돌면  총 시간 복잡도는 O(MN) 이 된다. 최대 N 값인 100,000 과 최대 M 값이 100,000 을 곱한 값은 10,000,000,000 로 100 억이 되는데, 컴퓨터가 1초에 계산할 수 있는 횟수는 대략 1억번이다. 문제에서 주어진 제한 시간은 1초이므로 시.. 2024. 7. 9.
[Algorithm/알고리즘] 누적합 알고리즘 Prefix Sum A = [1, 2, 3, 4, 5]# 부분합 = [1, 3, 6, 10, 15]  위와 같은 배열 A 가 있다. 이 배열의 각 부분합을 구해야 할 때 구할 수 있는 방법이 2가지 있다.    1. 각 인덱스를 반복해서 돌면서 구하기 ans = 0for i in range(start, end+1) ans += A[i]위 코드의 시간 복잡도는 O(N) 이며, 각 부분합을 구하기 위해서는 배열의 크기만큼 위 코드를 반복해야 한다.  ans = 0for j in range(배열의 크기): for i in range(start, end+1) ans += A[i] 그러므로 총 시간 복잡도는 O(NM) 이 된다. (M: 배열의 크기인 임의의 수)  2. 누적 합  누적 합 아이디어는 배열 A 에 들어있는 값이 바뀌.. 2024. 7. 9.
[백준/Python] 2839 설탕 배달 문제: https://www.acmicpc.net/problem/2839  사용 알고리즘: DP  상근이가 설탕을 정확하게 N kg 배달해야 한다. 이 때 설탕은 3kg, 5kg 두 가지 봉지에 담겨져 있다. 상근이가 설탕을 정확하게 N kg 배달해야할 때 최소 봉지의 개수를 구하는 프로그램 구현 입력N (3  출력상근이가 배달하는 봉지의 최소 개수 출력, 만약 정확하게 N kg 을 맞출 수 없다면 -1 출력  - 인덱스 1부터 사용할 것이기 때문에 dp 배열의 길이를 (n+1) 로 만들고, 기본 값을 -1 로 초기화- n 의 값이 5 이상인 경우와 아닌 경우를 나누어 초기화 시킴 (n 이 3, 4 인 경우 dp[5] 를 먼저 초기화 시키면 인덱스 에러남)# 입력받기n = int(input())# dp .. 2024. 7. 4.
728x90
반응형