백준93 돌 게임 - 9655번 주어진 수를 1부터 하나씩 키워보면서 규칙을 찾으면 풀 수 있는 쉬운 문제이다. n = int(input()) if n%2==1: print('SK') else: print("CY") 2022. 7. 27. 뒤집기 - 백준 1439번 주어진 수를 뒤집어야 한다. 00011000 은 가운데 11만 바꿔줘도 된다. (1번) 0 에서 1로, 1 에서 0으로 바뀌는 횟수를 세면 2번이다 이 횟수에 1을 더하고 2로 나눈 몫을 버림해주면 문제가 요구하는 최소횟수를 구할 수 있다. n = input() cont = 0 a = n[0] for i in n: if i == "1": if a == "1": pass else: cont+=1 a = "1" else: if a == '1': cont+=1 a = '0' else: pass print(int((cont+1)/2)) 2022. 7. 25. 수들의 합 - 백준 1789번 서로 다른 N개의 자연수들의 합 S가 주어졌을 때 N의 최대값을 구해야한다. N에 속하는 자연수들을 하나하나 구하는 과정은 굉장히 복잡하겠지만, N의 최대값을 구하는 과정은 간단하다. 자연수들의 집합 N에 속하는 자연수들을 1, 2, 3, ... 처럼 점점 작은 것부터 커진다고 생각한다. 1부터 하나씩 커져가며 합해진 합계가 S와 우연히 같아질 수도 있고 달라질 수도 있다. 우연히 같아질 경우는 생각하기 쉬우니 넘어가고, 달라질 경우에 대하여 생각해보자. 점점 커져가는 합계가 S에 근접하여 처음으로 음수가 되는 때가 있을 것이다. 이 때까지 수를 하나씩 샌 후 1을 빼주면 그 수가 N의 최대값이 된다. 왜냐하면 점점 커져가는 합계가 S에 근접하여 처음으로 음수가 되기 직전 앞에서 더해왔던 자연수들 중 몇.. 2022. 6. 28. 30 - 백준 10610번 30의 배수를 판단해야 한다. 1의 자리가 0으로 끝나야 하고 모든 자리수의 수를 다 더했을 경우 3의 배수가 되어야 한다. 그리고 만들 수 있는 수중 가장 큰 수를 만들어줘야하는 옵션이 있다. n = input() arr=[] # 배열로 바꾸기 for i in n: arr.append(i) sum = 0 # 각 자릿수의 수 합 구하기 for i in arr: sum+=int(i) # 30의 배수인지 판단 if '0' in arr and sum%3==0: # 가장 큰수를 만들어 줘야 함으로 내림차순 정렬 arr.sort() arr = arr[::-1] # 정답 출력 for j in arr: print(j,end="") else: print(-1) https://www.acmicpc.net/problem/.. 2022. 6. 26. 로프 - 백준 2217번 각 로프가 들 수 있는 최대 중량을 담은 배열을 내림차순으로 정렬한다. 인덱스 0번부터 끝까지 누적으로 로프들이 들 수 있는 최대중량을 계산하여 maximum 이라는 변수와 비교시켜 더 크면 maximum 변수를 최신화 해준다. 처음 최대값은 인덱스 0번의 값으로 해준다. n = int(input()) arr = [] for _ in range(n): a = int(input()) arr.append(a) arr.sort() arr = arr[::-1] maximum = arr[0] for i in range(n): if arr[i]*(i+1) > maximum: maximum = arr[i]*(i+1) print(maximum) https://www.acmicpc.net/problem/2217 2217.. 2022. 6. 25. 동전 0 - 백준 11047번 동전 종류를 배열로 입력을 받는다. 오름차순으로 정렬되어있기 때문에 배열의 가장 끝인 배열[-1]의 값이 가장 큰 값이다. 동전을 최소한으로 사용하여 K를 만들어야하기 때문에 K에서 큰 값을 하나씩 빼주면서 카운팅해준다. 배열에 들어있는 수 중 가장 큰 수가 K보다 크면 배열.pop() 으로 삭제해준다. K값이 0이 될때까지 가능한한 큰 값의 동전으로 빼준다. n, k = map(int, input().split()) coin = [] c=0 for _ in range(n): coin.append(int(input())) while k>0: if coin[-1] 2022. 6. 23. 잃어버린 괄호 - 백준 1541 괄호를 적절히 배치하여 계산결과가 가장 작은 수가 나오도록 해야한다. "-" 가 나오면 다시 "-" 가 나올 때까지 괄호를 쳐서 계산을 해주면 가장 작은 수가 나올 수 있다. a = input() parsing = [] b = 1 # 1 : 덧셈, -1 : 뺄셈 j=0 num = '' for i in a: j+=1 if i !='-' and i!='+': num +=i elif i == '+' and b == 1: parsing.append(int(num)) num = '+' elif i == '+' and b == -1: parsing.append(int(num)) num = '-' elif i == '-': parsing.append(int(num)) num = '-' b = -1 if j == le.. 2022. 6. 22. 카드 정렬하기 - 백준 1715번 카드를 묶는 순서를 우선순위 큐로 생각하여 문제를 해결한다. 5 묶음의 카드가 10, 20, 30, 40, 50 장 있다고 생각해 보자 가장 작은 수 2개를 묶은 뒤 비교횟수에 더하고 다시 가장 작은 수 2개를 묶은 뒤 비교횟수에 더하는 행위를 카드 묶음이 1개가 남을 때 까지 반복해준다. 10 20 30 40 50 (묶기) result : 0 30 30 40 50 (묶기) result : 0 + 30 60 40 50 (묶기) result : 30 + 60 60 90 (묶기) result : 90 + 90 150 (묶기) result : 180 + 150 150 (완료) result : 330 파이썬의 heapq를 이용하면 이 과정 그대로 진행해주면 되고, 배열만 이용하여 문제를 해결하게 되면 3번째 부.. 2022. 6. 21. 단지번호붙이기 - 백준 2667번 문제에 설명에 나와있듯이 1은 집이 있는 곳을 나타내고 0은 집이 없는 곳을 나타낸다. x축과 y축을 그려서 각 집마다 좌표를 구한다. 집이 있는 좌표만 배열에 담아서 DFS를 통해 문제를 해결할 수 있다. n = int(input()) arr = [] for _ in range(n): p = input() arr.append(p) x = 0 y = 0 cordinate = [] for i in arr: for j in i: if j == '1': cordinate.append([x,y]) x+=1 y+=1 x=0 # print(cordinate) def search(mainList): # 입력받은 배열이 비어있으면 종료 if mainList == []: return 'end' villageCount =.. 2022. 6. 18. 이전 1 ··· 5 6 7 8 다음