본문 바로가기

코딩8

[백준/7523] Gauß, 가우스 수학, 파이썬 📝 알고리즘 이 문제는 기본적인 수학 지식이 있으면 쉽게 풀 수 있다. 부등호 양쪽이 이하, 이상일 때 n부터 m까지의 개수 = m-n+1 n부터 m까지의 합 = (n+m)/2 💻 전체 코드 n = int(input()) for i in range(n): n,m = map(int, input().split()) ans = (m-n+1)*(n+m)//2 print('Scenario #{}:'.format(i+1)) print(str(ans)+'\n') 2023. 1. 19.
[백준/1551] 수열의 변화 💻 최종 코드 n,k = map(int, input().split()) num = list(map(int, input().split(','))) for _ in range(k): ans = [] # 초기화 for i in range(1,len(num)): sub = num[i] - num[i-1] ans.append(sub) num = ans # num을 계산한 값으로 초기화 print(*num, sep=',') 크게 어려운 알고리즘은 필요없지만, for문의 구조와 초기화해서 값을 갱신한다는 지식이 없으면 풀기 힘들 것같다..! 생각은 떠올랐지만, 구현하는 데에 좀 시간이 걸렸다. 이중 포문에 조금 더 익숙해져야겠다는 생각이 들었다. 2023. 1. 4.
[백준/1927] 최소 힙 문제를 잘 이해하면 구현은 어렵지 않다. ✍️ 첫번째 시도 import sys n = int(sys.stdin.readline()) heap = [] # 자연수라면 in heap 0이라면 출력 + out heap for _ in range(n): x = int(sys.stdin.readline()) if x == 0 and len(heap) != 0: print(min(heap)) heap.remove(min(heap)) elif x != 0: heap.append(x) else: print(0) 혼자서 문제에 따라 잘 구현한 것같은데,, 시간 초과ㅠㅠ 구글링 후 알게된 점은 파이썬에서 따로 heappush, heappop을 제공한다는 것이었다..! (from heapp 모듈) 📝 파이썬 heapq 모듈.. 2022. 12. 23.
[백준/2747] 피보나치 수 with 동적 계획법 이 내용은 알고리즘 수강 시간에 배웠던 내용이라 눈치를 챌 수 있었다. def fibo(n): if n == 0: return 0 elif n == 1 or n == 2: return 1 else: result = fibo(n-1) + fibo(n-2) return result print(fibo(int(input()))) 단순히 이렇게 재귀형식으로 피보나치 수열을 만들 수 있지만, 이렇게 되면 fibo(10)을 구하기 위해 fibo(9)와 fibo(8)을 구해야 한다. fibo(9)를 구한 다음, fibo(8)을 구하려면 다시 처음부터 구해야 한다. 따라서 시간 복잡도는 T(n) = T(n-1) + T(n-2) 결국 T(n) >= 2^n/2T(1)으로, 지수 시간이 걸리게 된다. 😱 이를 해결하기 위해.. 2022. 12. 22.
[백준/14912] 숫자 빈도수 개요 문제 풀면서 int형을 str형으로 바꿔서 비교하는 건 여러번 해본 것같은데 기억이 나질 않아 이번엔 제대로 정리해보려 한다! int > str for i in range(1, n+1): for j in str(i): 위 코드의 의미는 1부터 n까지의 숫자(int)를 만들고, 그 숫자들을 str로 변형한다는 뜻이다. 숫자 빈도수 문제에서는 입력된 d에 해당하는 숫자와 같은 숫자의 빈도를 체크하라고 했으니, 이중 for문 아래에 다음과 같이 작성해주면 된다. 전체 코드 n,d = map(int, input().split()) cnt = 0 for i in range(1, n+1): for j in str(i): if j == str(d): cnt += 1 print(cnt) 프로그래밍을 C로 시작해서.. 2022. 12. 21.
[백준/1157] 글자 공부 처음 쓴 코드 str = input() size = len(str) cnt = [0 for i in range(size)] # 입력 받은 문자열의 size 만큼 배열 선언 (카운팅을 위해) for i in range(size): for j in range(i+1, size): if str[i] == str[j]: # 이중 포문으로 문자열 서로서로 비교 cnt[i] += 1 # 같은 문자열이 나오면 cnt 배열을 + 해준다. for i in range(len(cnt)): if cnt[i] == cnt[i+1]: print('?') exit() m = max(cnt) if m == 1: print(str.upper()) else: print(str[m].upper()) 사실 알고리즘 시간에 kmp, 실패함수.. 2022. 12. 19.
[백준/2420] 사파리월드 x, y = map(int, input().split()) print(abs(x-y)) 이렇게 파이썬에서 제공하는 절댓값 함수 abs()를 사용해도 되지만, 새싹 문제의 조건문 분야인 만큼 조건문을 통해 문제를 풀어보자. x, y = map(int, input().split()) if y>x : print(-(x-y)) else: print(x-y) 2022. 12. 18.
[python] 리스트에 대해서 알아보자. 프로그래밍을 공부하는 사람이라면 한번 쯤은 알고리즘과 자료구조에 대해 들어보았을 것이다. 알고리즘은 특정 문제를 해결하기 위한 단계를 뜻하고, 자료구조는 컴퓨터 내에서 자료를 구조화하는 특별한 방식이다. 우리는 알고리즘과 자료구조를 통해 효율적인 프로그래밍을 할 수 있다! 자료구조의 한 종류인 리스트에 대해 알아보자. 1. 리스트란? 리스트는 기본적으로 리스트 상수이며, 어떤 변수에 할당된다. friends = ['Amy', 'Jack', 'Effy'] fruits이라는 변수는 3개의 문자열을 가지고 있는 것이다. 리스트는 컬렉션의 한 종류이다. 컬렉션: 하나의 변수에 여러 값을 넣는 것이 가능하도록 하는 것! 2. 리스트 선언 리스트의 각 항목들은 '[]'로 둘러싸이게 되며, 항목들에 대한 구분은 ,(.. 2022. 8. 13.