본문 바로가기

백준93

통계학 - 2108번 반올림을 할 때 컴퓨터에서는 가장 가까운 짝수 반올림해주려는 경향이 있다. 예를 들면 1.5를 반올림하면 2가 나오지만 2.5를 반올림하면 2가된다. (우리가 알고있는 수학적 지식으로는 3이 되야한다.) 따라서 반올림이 필요한 산술평균에서 직접 반올림을 해주는 코드를 만들어줘야한다. import sys t = int(input()) a = [] for _ in range(t): a.append(int(sys.stdin.readline())) def Avg(a): if sum(a)>=0: if (sum(a)/t)%1 >= 0.5: return print(int(sum(a)/t)+1) else: return print(int(sum(a)/t)) else: if abs(abs(sum(a))/t)%1 >= 0... 2022. 10. 24.
블랙잭 - 2798번 n개의 카드중 3개를 찾아야 해서, 3중for문으로 답을 찾았다 (브루트포스) n,m = map(int,input().split()) a = list(map(int,input().split())) a.sort() result = 0 for i in range(n): for j in range(n): for k in range(n): if i==j or j==k or k==i: pass elif a[i]+a[j]+a[k] > m: pass elif result < a[i]+a[j]+a[k]: result = a[i]+a[j]+a[k] print(result) 2022. 10. 22.
스택 수열 - 1874번 deque와 heapq를 이용하였다. 1부터 n까지의 수를 만들어줘도 되지만 heapq를 이용하여 만들어져야 하는 수열을 입력받으면서 heapq에 넣으면서 바로바로 정렬을 빠르게 시켰다. (미리 1부터 n을 만들어두는 방식을 썼으면 더 효율적이었을듯함) from collections import deque import heapq import sys h = [] stack = deque() arr = [] result = deque() idx = 0 t = int(input()) for _ in range(t): inn = int(sys.stdin.readline()) heapq.heappush(h,inn) arr.append(inn) while h or stack: # print(stack) if sta.. 2022. 10. 20.
별 찍기 - 19 - 10994번 재귀를 이용해 풀었다. 중간을 기준으로 위쪽과 아래쪽으로 나누어 각 함수를 생성했다. inn = int(input()) def counting_star(n, blank): if n == 1: print('* '*blank+'*'+' *'*blank) return else: print('* '*blank+'*'*(1+(n-1)*4)+' *'*blank) print('* '*blank+'*'+' '*(1+(n-1)*4-2)+'*'+' *'*blank) blank+=1 counting_star(n-1,blank) def down_counting_star(n, blank): if blank == -1: return else: print('* '*blank+'*'+' '*(1+(n-1)*4-2)+'*'+' *'*.. 2022. 10. 17.
별 찍기 - 23 - 13015번 처음에 빈공간 계산하는 공식만 구하면 편하다. n * 2 - 3이 중간에 빈 공간이다. n = int(input()) edge ='*'*n+' '*(n*2-3)+'*'*n w = n-2 print(edge) for i in range(1,n-1): level = ' '*i+'*'+' '*(n-2)+'*'+' '*(n*2-3-i*2)+'*'+' '*(n-2)+'*' print(level) level = ' '*(n-1)+'*'+' '*(n-2)+'*'+' '*(n-2)+'*' print(level) for i in range(n-2,0,-1): level = ' '*i+'*'+' '*(n-2)+'*'+' '*(n*2-3-i*2)+'*'+' '*(n-2)+'*' print(level) print(edge) 2022. 10. 17.
보석 도둑 - 1202번 백준에서는 파이썬 모듈인 queue모듈을 사용할 수 없다.(이 모듈안에 우선순위큐 모듈이 있다.) 따라서 max heap을 이용하여 풀었다. 보석들은 무게가 작은 순으로, 가방은 적게 담을 수 있는 가방 순으로 정렬을 한다. 가방을 한개씩 검사한다. while 무한루프를 통해 보석을 하나씩 뺀다. 이때, 보석의 무게가 가방의 무게를 넘지 않도록 한다. 만약 while이 정지하면 앞에서 하나씩 뺐던 보석들을 max heap으로 담아둔 heap에서 root위치에 있는 값을 결과 변수에 pop하여 더해준다. 만약 더이상 뺄 보석이 없으면 중지한다. 문제를 풀 때, 답은 맞았는데 시간초과와 런타임에러가 많이 떠서 코드의 구조를 갈아엎어가면서 새로운 구조를 만들어 갔다. 무한루프로 하나씩 꺼내서 담아두는 방식을 .. 2022. 10. 12.
가운데를 말해요 - 1655번 우선순위 큐로 풀다가 시간초과로 해결하지 못하여 근본적인 문제를 찾던 도중 힙 2개를 이용하여 풀면 된다는 것을 알게 되었다. 최대힙과 최소힙에 입력받은 숫자들을 절반씩 나눠 저장한 뒤 중간값만 출력하는 방식이다. 예를들어 문제에 있는 테스트 케이스를 보면서 사람이 직접 푼다고 가정하자 입력으로 7개의 숫자를 입력받는다. 입력 = [ 1, 5, 2, 10, -99, 7, 5] 입력 : 1 >> 출력 : 1 입력 : 5 >> 출력 : 1 입력 : 2 >> 출력 : 2 입력 : 10 >> 출력 : 2 입력 : -99 >> 출력 : 2 입력 : 7 >> 출력 : 2 입력 : 5 >> 출력 : 5 이렇게 표로 표현해볼 수 있다. 여기서 최대힙과 최소힙을 사용하여 입력받는 수들을 2부분으로 쪼갤 것이다. 처음부터.. 2022. 10. 11.
요세푸스 문제 0 - 11866번 큐를 이용하여 해결했다. 큐에 1~n까지의 수를 넣고, 큐가 텅 빌때까지 무한루프를 돌려준다. 무한루프 안에서 k-1번 popleft() 후 큐에 다시 append()를 해주고 k번째에 popleft() 를 해주고 결과 배열에 값을 담는다. 큐가 빌 때까지 반복하면된다. from collections import deque n, k = map(int,input().split()) q = deque(i for i in range(n+1)) q.popleft() result = [] while q: for i in range(1,k): a = q.popleft() q.append(a) out = q.popleft() result.append(out) print('') 2022. 10. 10.
좌표 정렬하기 - 11650번 입력 받은 좌표들을 2중 배열에 담아서 그냥 sort()해줘도 답이 나오지만 람다식을 사용해서 풀어보았다. sort()매소드의 key로 람다식을 넣었는데, lambda x: (x[0], x[1]) 을 key로 넣어줬다. 람다식의 의미는 0번 인덱스를 기준으로 정렬하고 같은것은 1번 인덱스를 기준으로 정렬하라는 것이다. n = int(input()) arr = [] for i in range(n): arr.append(list(map(int,input().split()))) # arr.sort() arr.sort(key = lambda x: (x[0], x[1])) for i in arr: for j in i: print(j,end=' ') print() 2022. 10. 10.
체스판 다시 칠하기 - 1018번 입력으로 들어온 체스판에 대하여 8X8크기의 체스판이 될 수 있는 경우를 하나하나 다 조사를 한 뒤 다시 칠해야 할 칸만 배열에 모두 담고 최소값을 출력한다. import sys y_axis, x_axis = map(int,input().split()) graph = [[0]*x_axis for _ in range(y_axis)] visited = [[False]*x_axis for _ in range(y_axis)] result = [] for y in range(y_axis): p = sys.stdin.readline() for x in range(x_axis): graph[y][x] = p[x] for i in range(y_axis-7): for j in range(x_axis-7): black .. 2022. 10. 9.
나이순 정렬 - 10814번 2중 배열을 만들어 담은 후 정렬을 해주면 된다. 인덱스 번호 0번을 기준으로 정렬하는 방법은 lambda 함수를 사용하여 만들어줬다. n = int(input()) arr = [] for _ in range(n): a,b = input().split() arr.append([int(a),b]) arr.sort(key = lambda x : x[0]) for i in arr: for j in i: print(j,end=' ') print() 2022. 10. 9.
영화감독 숌 - 1436번 처음에 만들어지는 수들 간에 규칙을 찾으려고 시간을 쏟았지만 마땅한 규칙을 찾진 못하였다. 그래서 666부터 1씩 더해가며 수에 '666'이 있는지 검사하는 방식을 사용했다. n = int(input()) no = 0 cnt = 665 while no 2022. 10. 5.