본문 바로가기

전체 글137

균형잡힌 세상 - 4949번 deque를 이용하였다. (stack기능만 사용) 소괄호와 대괄호가 번갈아 들어왔을 때 pop하기 전에 가장 마지막으로 어떤 종류의 괄호가 들어왔었는지 확인이 필요하다. for 문이 끝나고 stack 이 비어있어야 yes이다. from collections import deque while True: inn = input() if inn=='.': break stack = deque() can_yes = True for i in inn: if i=='(': stack.append(i) elif i=='[': stack.append(i) elif i==')': if stack and stack[-1]=='(': stack.pop() else: can_yes = False break elif i==']': .. 2022. 10. 26.
덱 - 10866번 기존에 파이썬에 있는 deque를 사용한다. import sys from collections import deque t = int(input()) deque = deque() for _ in range(t): # print(deque) instruct = sys.stdin.readline().strip() if instruct[:4] == 'size': print(len(deque)) elif instruct[:4] == 'fron': if deque: print(deque[0]) else: print(-1) elif instruct[:4] == 'back': if deque: print(deque[-1]) else: print(-1) elif instruct[:4] == 'empt': if deque.. 2022. 10. 26.
큐 - 10845번 입력 받을 때, sys.stdin.readline().strip()을 써줘야 속도가 빨라진다. 큐 사용을 위해 deque를 가져왔다. 큐가 비어있는지 확인하려면 if que: 로 확인해주면 된다. 비어있으면 False를, 뭔가 들어있으면 True를 반환한다. import sys from collections import deque t = int(input()) que = deque() for _ in range(t): # print(que) instruct = sys.stdin.readline().strip() if instruct[:4] == 'push': que.append(instruct[5:]) elif instruct[:3] == 'pop': if que: r = que.popleft() pri.. 2022. 10. 26.
프린터 큐 - 1966번 데큐를 이용한다. 입력받은 값들을 데큐 1개, 배열 1개에 저장한다. 배열에 저장했던 값들을 크기가 큰 순서대로 정렬한다. 배열에 있는 값들은 이제 우선순위를 의미한다. 데큐에서 우리가 찾고자하는 인덱스에 있었던 것이 언제 나오는지 알아야 한다. popleft()로 하나를 꺼내어 우선순위를 비교해보고 append하여 나중에 다시 확인할지, 꺼낼지 판단해준다. popleft()를 하게되면 우리가 찾고자하는 것의 인덱스가 -1 감소하거나 데큐의 가장 끝에 위치하게 된다. 찾고자하는 것의 인덱스를 의미하는 m의 값을 움직이며 답을 구해준다. (m==0일 때, 우선순위를 만족하면 된다.) from collections import deque import sys t = int(input()) for _ in ra.. 2022. 10. 24.
통계학 - 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.
부울 대수에서 모든 원소의 보수가 유일함을 증명 2가지 부울 대수에서 모든 원소의 보수가 유일함을 증명 2가지 x가 부울대수의 임의의 원소면 보수법칙에 의해 다음을 만족한다. x+x’ = 1, xx’ = 0 임의의 보수 y가 존재한다고 가정하자. y = x’임을 보여준다. 일단, y는 x의 보수임으로 아래 조건이 만족한다. x+y = 1, xy = 0 y = x’임을 증명하겠다. y = y 1 = y(x+x’) = yx + yx’ = 0 + yx’ (위에서 만족하는 조건) = yx’ + xx’ = x’(y+x) = x’ 1 (위에서 만족하는 조건) = x’ 따라서 y = x’ 이 만족하여 보수는 유일하다. 임의의 보수 b와 임의의 보수 c가 존재한다고 가정하자. b=c임을 보여준다. 일단, b, c 는 x의 보수임으로 아래 조건이 만족한다. x+b = 1, .. 2022. 10. 23.
블랙잭 - 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.
소수 판별 & 상속 어떤 자연수 n이 주어지면 그 자연수 n보다 작은 소수가 뭐가 있는지 출력해주는 기능을 만들것이다. 상속으로 구현하기 - 부모클래스 is_prime package prime_checker; public class is_prime { boolean is_prime_fuc(int n) { // double sqrt_n = Math.sqrt(n); for(int i=2; i < n; i++) { if(n%i == 0) return false; } return true; } } - 자식클래스 (is_prime클래스를 부모로 상속받는다) package prime_checker; public class find_prime extends is_prime{ // 상속받는 클래스, 매소드를 선언해줘야함 //매소드 //(.. 2022. 10. 21.
스택 수열 - 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.
상속 상속이란 부모가 자식에게 물려주는 행위를 말한다. 부모 클래스를 상위 클래스라고 부르기도 하고, 자식 클래스를 하위 클래스, 또는 파생 클래스라고 부른다. 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 코드이 중복을 줄여준다. 자식 객체를 생성하면 부모객체가 먼저 생성되고, 자식 객체가 그 다음에 생성된다. 메소드 재정의 override 자식 클래스에서 부모의 메소드를 사용하지 않고 수정하여 사용할 때 메소드 재정의를 하게된다. 메소드 재정의를 하게 되면 메소드 호출 시 자식의 메소드가 호출된다. 메소드 재정의 시 주의할 점 - 부모의 메소드와 동일한 시그니처 - 접근제한을 더 강하게 오버라이딩할 수 없다. - 새로운 예외를 throws할 수 없다. 만약 부모 메소드를 호출하고 싶다면.. 2022. 10. 19.
별 찍기 - 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.