목록전체 글 (106)
오예 !!!
이코테 p.99 실전 문제 - 1이 될 때까지 내 소스코드 지금 당장 N이 K로 나누어 떨어지면 나누고, 그렇지 않으면 1을 빼는 방식 import sys N, K = map(int, sys.stdin.readline().rstrip().split()) cnt = 0 while True: if N == 1: # N이 1이 되면 반복문 종료 break # N이 K로 나누어 떨어지지 않으면 1 빼기 if (N % K) != 0: N -= 1 # N이 K로 나누어 떨어지면 나누기 else: N /= K cnt += 1 print(cnt) 교재 소스코드 ver.1 - 간단한 답안 그리디 알고리즘 기반으로, 주어진 N에 대하여 최대한 많이 나누기 어떠한 수가 있을 때, 2 이상의 수로 나누는 것이 1을 빼는 것보..
이코테 p.96 실전 문제 - 숫자 카드 게임 내 소스코드 각 행의 가장 작은 수 중에서 가장 큰 수를 구하는, 그리디 알고리즘 적용 import sys N, M = map(int, sys.stdin.readline().rstrip().split()) data = [] for n in range(N): data.append(list(map(int, sys.stdin.readline().rstrip().split()))) maximum = 0 # 각 행의 가장 작은 수 중 가장 큰 수 구하기 for n in range(N): # 각 행의 가장 작은 수 구하기 minimum = data[n][0] for m in range(M): if minimum > data[n][m]: minimum = data[n][..
이코테 p.92 실전문제 - 큰 수의 법칙 내 소스코드 (for문 이용) import sys N, M, K = map(int, sys.stdin.readline().rstrip().split()) data = list(map(int, sys.stdin.readline().rstrip().split())) # 내림차순 정렬 data.sort(reverse = True) result = 0 cnt = 0 for m in range(M): if cnt < K: result += data[0] else: result += data[1] cnt = 0 cnt += 1 print(result) 그리디 알고리즘을 이용하여 가장 큰 수를 K번 더하고, 두 번째로 큰 수를 1번 더하는 과정을 반복하면 배열로 주어진 수들..
그리디 알고리즘 '탐욕법' 현재 상황에서 지금 당장 좋은 것만 고르는 방법 매 순간 가장 좋아 보이는 것을 선택하며, 현재의 선택이 나중에 미칠 영향은 고려 X 사전 지식이 없어도 풀 수 있음 그리디 알고리즘 유형의 문제는 매우 다양 ➡️ 많은 유형 접해보기 기준에 따라 좋은 것을 선택하는 알고리즘 문제에서 '가장 큰 순서대로', '가장 작은 순서대로'와 같은 기준을 제시해줌 자주 정렬 알고리즘과 짝을 이뤄 출제 그리디 알고리즘 예제 - 거스름돈 이코테 p.87 예제 3-1 정답 소스코드: import sys N = int(sys.stdin.readline().rstrip()) cnt = 0 # 큰 단위의 화폐부터 차례대로 확인 coin_types = [500, 100, 50, 10] for coin i..
1. 내장함수 별도의 import 명령어 없이 바로 사용할 수 있음 input(), print() 입출력 함수 제공 함수명 기능 예시 코드 sum() iterable 객체가 입력으로 주어졌을 때, 모든 원소의 합 반환 result = sum([1, 2, 3, 4, 5]) min() 파라미터가 2개 이상 들어왔을 때 가장 작은 값 반환 result = min(7, 3, 5, 2) max() 파라미터가 2개 이상 들어왔을 때 가장 큰 값 반환 result = max(7, 3, 5, 2) eval() 수학 수식이 문자열 형식으로 들어오면 해당 수식을 계산한 결과 반환 result = eval("(3 + 5) * 7") sorted() iterable 객체가 들어왔을 때 정렬된 결과 반환 key 속성으로 정렬 ..
입출력 입력 입력을 위한 전형적인 소스코드 # 데이터의 개수 입력 n = int(input()) # 각 데이터를 공백으로 구분하여 입력 data = list(map(int, input().split())) # 내림차순 정렬 data.sort(reverse = True) print(data) input() 하나의 문자열을 입력받는 함수 list(map(int, input().split())) input()을 통해 입력받은 문자열을 split()을 통해 공백으로 구분하여 리스트로 만듦 map()을 통해 리스트의 모든 원소를 int로 변환 list()를 통해 최종 리스트를 만듦 공백으로 구분된 데이터의 개수가 많지 않다면, 리스트로 만들지 않고 바로 변수에 넣을 수 있음 n, m, k = map(int, in..
함수 동일한 알고리즘을 반복적으로 수행해야 할 때 효율적으로 코드 작성 가능 기본 형태 def 함수명(매개변수): 소스코드 return 반환값 매개변수 함수 내부에서 사용되는 변수의 값을 전달받기 위함 retrun 함수에서 어떠한 값을 반환할 때 사용 매개변수나 return문은 존재하지 않을 수 있음. 인자를 넘겨줄 때, 값을 지정해서 넘겨줄 수 있음 이 경우 매개변수의 순서가 달라도 상관 X def add(a,b): print(a + b) add(b = 3, a = 2) global 키워드 함수 안에서 함수 밖의 변수 데이터를 변경해야 하는 경우 사용 global 키워드로 변수를 지정하면, 해당 함수에서는 지역 변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조하게 됨. 예시 a = 0 def ..
집합 자료형 리스트 or 문자열을 이용해서 만들 수 있음 다음과 같은 특징 존재 중복을 허용하지 않음 순서가 없음 사전 자료형과 집합 자료형은 순서가 없기 때문에 인덱싱 불가 특정 원소가 존재하는지 검사하는 연산의 시간 복잡도는 O(1) '특정한 데이터가 이미 등장한 적이 있는지 여부'를 체크할 때 효과적 집합 자료형의 초기화 set() 함수 이용 중괄호 {} 안에 각 원소를 콤마 , 를 기준으로 구분해서 넣음 data = set([1, 1, 2, 3, 4, 4, 5]) print(data) # 결과: {1, 2, 3, 4, 5} data = {1, 1, 2, 3, 4, 4, 5} print(data) # 결과: {1, 2, 3, 4, 5} 집합 자료형의 연산 합집합: | 교집합: & 차집합: - a =..