Python_알고리즘
-
[Python] 백준 4948 베르트랑 공준Python_알고리즘 2021. 7. 7. 03:17
문제 바로가기 문제분석 # 소수 구하는 방법을 함수로 만들고 이를 이용해 문제에서 주어진 범위에서 소수를 구한다. # 에라토스테네스의 체를 활용해야한다. # 2부터 시작해서 배수를 구하고, 특정 수의 배수라는 것은 소수가 아니라는 뜻이므로 그 배수를 소수에서 제외하는 방식이다. 문제풀이 # 에라토스테네스의 체 개념을 이용해 소수구하는 함수 만들기 def num(num): if num == 1: return False else: for i in range(2, int(math.sqrt(num)) + 1): if num % i == 0: return False return True all_list = list(range(2, 246912)) save_list = [] for i in all_list: if ..
-
[Python] 백준 1011 Fly me to the Alpha CentauriPython_알고리즘 2021. 7. 6. 03:34
문제 바로가기 문제분석 # 이동을 앞뒤로 한칸씩 밖에 못한다. # 시작과 도착 직전에는 한칸밖에 못움직인다. # 최소한의 작동횟수로 이동해야하므로 1씩 커지다가 대칭으로 1씩 줄어들게 움직인다. # 총 n번의 횟수로 갔다고 가정할 때, n-1번째 이동한 거리는 최대 2광년, n-2번째에 이동한 거리는 최대 3광년, n-3번째에 이동한 거리는 최대 4광년...... # 이런식으로 규칙을 찾아야 한다. 거리 최단루트 최소이동횟수 1 1 1 2 11 2 3 111 3 4 (2의 제곱) 121 3 (2*2-1) 5 1211 4 6 1221 4 7 12211 5 8 12221 5 9 (3의 제곱) 12321 5(3*2-1) 10 123211 6 11 123221 6 12 123321 6 13 1233211 7 1..
-
[Python] 백준 2839 설탕 배달Python_알고리즘 2021. 7. 4. 00:18
문제 바로가기 문제분석 # 봉지를 가작 적게 가져가야 하므로 5킬로그램으로 먼저 나누고 나머지가 있다면 3킬로그램으로 빼면서 계산하는게 핵심이다. # 무한루프를 돌리고 그 안에서 if문으로 조건을 걸어 break해주는데, break의 조건은 2개가 생긴다. # 하나는 모두 계산이 되어서 출력이 되었을 때, 다른 하나는 정확하게 N킬로 그램을 만들 수 없을때 이다. 문제풀이 N = int(input()) bag = 0 while True: if N % 5 == 0: bag += (N // 5) print(bag) break N -= 3 bag += 1 if N < 0: print(-1) break # 설탕 무게(N)를 입력값으로, 받고 설탕 봉지를 셀 변수를 초기화한다. # 무한루프를 만들고, 조건문으로 ..
-
[Python] 백준 1316 그룹 단어 체커Python_알고리즘 2021. 7. 3. 01:52
문제 바로가기 문제분석 # 그룹단어를 확인하기 위해서 첫번째 인덱스부터 나머지 인덱스에 있는 알파벳을 비교해야한다. # 만약 첫번째 알파벳을 옆 인덱스와 비교했을 때, 같다면 계속 비교를 하고 # 다른 알파벳이 나왔다면 그 인덱스부터 끝날때까지는 첫번째 알파벳이 나오면 안된다. 문제풀이 # 방법1 n = int(input()) for _ in range(n): word = input() for i in range(len(word) - 1): if word[i] != word[i + 1]: if word[i] in word[i + 1:]: n -= 1 break print(n) # 첫 입력값으로 단어의 개수를 입력 받는다. # 그룹단어가 몇개인지 출력해야 하므로 주어진 단어의 개수 만큼 반복문을 돌리고 두..
-
[Python] 백준 2941 크로아티아 알파벳Python_알고리즘 2021. 7. 2. 01:45
문제 바로가기 문제분석 # 크로아티아 알파벳이 입력값으로 주어지고 표에 나와있는 알파벳은 변경된 형태로 입력된다. # 입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. # 크로아티아 알파벳은 하나의 알파벳으로 쓰이고, 출력은 크로아티아 알파벳이 몇개인지 확인하는 것이므로 # 크로아티아 알파벳을 인덱스가 하나인 아무 알파벳으로 치환하는게 핵심이다. 문제풀이 words = input() croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] for i in croatia: words = words.replace(i,'*') print(len(words)) # 입력값으로 크로아티아 알파벳을 받는다. # 크로아티아 알파벳을 리스트..
-
[Python] 백준 1157 단어 공부Python_알고리즘 2021. 7. 1. 03:13
문제 바로가기 문제분석 # 중복문자는 제거하고 남은 문자들을 반복문으로 돌려, 입력받은 문자에서 갯수를 세는 것이 핵심이다. # set함수와 count함수를 사용하여 중복을 제거한 알파벳의 갯수를 리스트에 담고, # if문으로 그 갯수 중에 가장 큰 값을 max함수로 찾아 반환하는데, 해당 값의 알파벳 인덱스를 이용해 출력한다. 문제풀이 words = input().upper() # 'mississipi' w = list(set(words)) # 받은 문자열 중 중복문자 제거 후 리스르로 저장 / w = ['M','I','S','P'] count_list = [] # 알파벳 개수 저장할 빈 리스트 / [1, 4, 4, 1] for i in w: count = words.count(i) # 입력받은 문자열..
-
[Python] 백준 4673 셀프 넘버Python_알고리즘 2021. 6. 29. 17:47
문제 바로가기 문제분석 # 33 => 33+3+3=39 일 때, 33은 39의 생성자라고 하고, 이런 생성자가 없는 숫자를 셀프 넘버라 한다. # 문제의 핵심은 생성자 함수를 만들고, 셀프넘버를 제외하는 # 함수를 돌려 생성자가 나오면 담을 리스트를 초기화 한다. # 주어진 범위의 수들을 반복문을 돌려 함수로 모든 수의 생성자를 찾아 리스트에 담는다. # 다시 주어진 범위의 수들을 하나씩 꺼내 리스트에 있는지 확인하고 없다면 그게 셀프 넘버가 되므로 출력한다. 문제풀이 def d(n):# 생성자를 구하는 함수 num = n + sum(map(int, str(n)))# 이 때 n이 생성자, num은 생성자가 있는 수가 된다. return num a = [0] * 10001# 생성자가 있는 수들을 모아 놓을..
-
[Python] 백준 4344 평균은 넘겠지Python_알고리즘 2021. 6. 29. 08:37
문제 바로가기 문제분석 # 두 줄에 걸쳐 입력받은 값을 인덱스와 슬라이싱으로 가져와 평균을 구하고, 구한 평균값을 입력받은 각 학생들의 점수와 비교하는 이중 반복문으로 풀이한다. 문제풀이 c = int(input()) for _ in range(c): nums = list(map(int, input().split())) ave = sum(nums[1:])/nums[0] count = 0 for j in nums[1:]: if j > ave: count += 1 rate = count/nums[0]*100 print(f"{rate:.3f}%") # 테스트 케이스 수(c)를 입력받고 그 수만큼 반복을 한다. # 반복문 안에서 각 테스트 케이스마다 학생수(n)와 n명의 점수를 입력 받는다. - split으로 ..