본문 바로가기

분류 전체보기71

[ BOJ ] 2309 일곱난쟁이 - python 문제풀이 2309 일곱난쟁이 접근 : 특정 인덱스의 난쟁이 선택O/선택X으로 재귀, 총합 조건을 백트래킹에 활용 풀이 방법 - 미리 난쟁이 키 순서대로 정렬 - 인덱스를 1씩 올려가면서 해당 순서의 난쟁이 선택하거나 안하거나 2가지로 재귀 - 도중에 백트래킹으로 시간 초과 방지 def find(cnt,s,idx,li): global r if r != []: # 이미 결과 찾았으면 중단 return if s > 100: # 100보다 커지는 순간 중단 return if idx == 9: # 모든 난쟁이를 지나왔을 때, if cnt == 7 and s == 100: # 조건을 만족하는 조합이 있다면 r = li # 결과로 지정하고 중단 return # idx 번째 난쟁이를 선택하거나 선택하지 않는 경우를 재귀로..... 2021. 7. 19.
[ BOJ ] 1260 DFS와 BFS - python 문제풀이 1260 DFS와 BFS 접근 : 기본 DFS, BFS 구현 문제라 별다른 전략은 세우지 않았고, 다양한 방법으로 풀어보려 했다 풀이 방법 1. 함수X while문으로 stack 활용해서 풀기 2. dfs는 함수 활용, bfs는 deque 활용하기 방법1. 함수 없이 while문 활용해서 푼 방법 N,M,V = map(int, input().split()) # 정점 i를 key, i와 연결된 정점들을 리스트에 담아 value로 갖는 딕셔너리 info info = {i:[] for i in range(1,N+1)} for _ in range(M): a,b = map(int, input().split()) info[a].append(b) info[b].append(a) # 문제 조건 : 정점이 작은 순서대로.. 2021. 7. 16.
[ SWEA ] D3 - 2806 NQueen - python 문제풀이 # info : 인덱스, 값 = 행,몇번째 인덱스에 1 넣었는지 def check(info,turn): global N,cnt if turn == N: # 종료조건 : 마지막행까지 다 퀸을 다 놓고 넘어왔는지 cnt += 1 return tmp = [0]*N for i in range(len(info)): # 열 조건 tmp[info[i]] = 1 # 왼쪽 대각선 조건 if info[i]-(turn-i)>=0: tmp[info[i]-(turn-i)] = 1 # 오른쪽 대각선 조건 if info[i]+(turn-i) 2021. 7. 14.
[ SWEA ] D3 - 5603, 4299, 11736, 11856 - python 문제풀이 5603 건초더미 r = [] for tc in range(int(input())): N = int(input()) info = [int(input()) for _ in range(N)] avg = sum(info)//N r.append("#{} {}".format(tc+1, sum([x-avg for x in info if x>avg]))) print("\n".join(r)) 4299 태혁이의 사랑은 타이밍 접근법 : 케이스 나눠서 접근 => 그냥 보유한 시간을 모두 분으로 바꿔서 빼기만 해도 풀수있음 res = [] for tc in range(int(input())): D,H,M = map(int, input().split()) r = -1 if D==11: if H==11 and M>=11: r .. 2021. 7. 14.
[ SWEA ] D3 - 1493 수의 새로운 연산 - python 문제풀이 1493 수의 새로운 연산 접근법 : 규칙은 대각선, 각 대각선의 시작숫자와 끝 숫자는 규칙이 있음 => 내가 찾으려는 숫자가 몇 번째 대각선에 있을지 찾고 거기서 몇 번째 숫자인지 더해주면 됨 # d의 인덱스:값 = (idx-1)번째 대각선:끝숫자 d = [0] #속도 줄이려는 목적 - 예전 테케에서 계산한 적 있는 대각선이면 값만 찾아올것 def find(n): global d if n 2021. 7. 13.
[ SWEA ] D3 - 1221, 10912, 4676 - python 문제풀이 1221 GNS 접근법 : 딕셔너리에서 개수만 불러와서 순서에 맞춰 출력, join 활용 order = ["ZRO","ONE","TWO","THR","FOR","FIV","SIX","SVN","EGT","NIN"] for _ in range(int(input())): d = {"ZRO":0,"ONE":0,"TWO":0,"THR":0,"FOR":0,"FIV":0,"SIX":0,"SVN":0,"EGT":0,"NIN":0} tc,n = input().split() for num in input().split(): d[num] +=1 print(tc) for o in order: print(" ".join([o]*d[o]),end=" ") print() 10912 외로운 문자 접근법 : 정렬시켜놓고 idx를 마.. 2021. 7. 13.
[ SWEA ] D3 - 3499, 5162, 1206, 5356 - python 문제풀이 3499 퍼펙트 셔플 접근법 : 규칙은 절반 나눠 번갈아가면서 출력하기때문에 for문을 절반만 돌되 짝/홀수 조건만 잘 고려해서 출력 res = [] for tc in range(int(input())): n = int(input()) c = list(input().split()) r = [] for i in range(n//2): r.append(c[i]) if n%2==0: r.append(c[n//2+i]) else: r.append(c[n//2+i+1]) res.append("#{} {}".format(tc+1, " ".join(r) if n%2==0 else " ".join(r+[c[n//2]]))) print("\n".join(res)) 이 문제는 테스트케이스가 많아서인지 리스트에 담아 줄바꿈.. 2021. 7. 13.
[ OS 기초 ] 09. Virtual Memory (2) (앞에서 이어) 비연속 메모리 할당 기법과 각각의 특징, 주소 매핑, 메모리 관리, 공유 및 보호 1. segmentation system 2. hybrid paging and segmentation system 00 개요 운영체제의 주 기능 중 하나인 메모리 관리는 크게 메모리 연속 할당과 비연속 할당으로 구분할 수 있다. 앞서 연속 할당 방법의 Uni-programming, Multi-programming(FPM, VPM)에 대해 알아보았고 대표적인 비연속 할당 방법(Paging System, Segmentation System, Hybrid) 중 페이징 시스템까지 알아보았다. 이번 차시에서는 남은 두 방법인 세그멘테이션 시스템과 페이징시스템을 세그멘테이션 시스템과 결합한 하이브리드 시스템에 대해 살.. 2021. 7. 13.
[ OS 기초 ] 09. Virtual Memory 1. 메모리 비연속 할당과 address mapping 2. Paging System - 특징, 주소 매핑, 관리 및 공유, 보호 00 개요 앞서 메모리 관리와 연속 할당 기법에 대해 살펴보았고 다음은 비연속 할당에 대한 내용이다. 비연속 할당은 메모리를 어떻게 할당하는 방법이며 연속 할당과의 차이점은 무엇인지, 대표적인 비연속 할당 기법인 paging, segmentation, hybrid paging and segmentation system에 대한 내용을 알아보았다. 01 비연속 할당과 address mapping 비연속 할당은 프로세스가 메모리에 올라갈 때 연속된 공간에 올라가는 게 아닌 띄엄띄엄 올라가는 메모리 할당 방식이다. 이때 띄엄띄엄 올리기 위해서는 프로세스를 여러 개의 단위로 분할해주는.. 2021. 7. 12.
[ OS 기초 ] 08. Memory Management 1. 메모리 관련 개념 - 종류, 계층, 워드와 블록, 주소 바인딩(address binding), Dynamic loading, Swapping 2. 메모리 할당 - 연속적 메모리 할당 : Uni programming / Multi programming (FPM, VPM)과 배치 전략 - 비연속적 메모리 할당( 다음에 다룰 것) 00 개요 운영체제는 자원을 잘 관리해 사용자와 응용 프로그램에 서비스를 제공하는 역할을 한다. 지금까지는 운영체제의 기능 중 프로세스 관리에 대해 살펴봤고, 다음에 나올 부분은 메모리 관리다. 운영체제가 메모리를 관리한다는 것은 뭔지, 어떻게 관리를 하는지에 대해 살펴보기 위한 기본적인 개념을 우선 살펴보고 메모리 할당 방식에 대해 알아보았다. 01 메모리, 메모리 관련 개념.. 2021. 7. 12.
[ SWEA ] D3 - 10804, 10200, 6692, 5789 - python 문제풀이 10804 문자열의 거울상 res = [] d = {"b":"d","d":"b","p":"q","q":"p"} for tc in range(int(input())): s = input() r = list(map(lambda x:d[x],s))[::-1] res.append("#{} {}".format(tc+1, "".join(r))) print("\n".join(res)) 10200 구독자 전쟁 테스트케이스가 많은지 매번 프린트하는것보다 마지막에 join으로 한번 하는게 훨씬 빠름 r = [] for tc in range(int(input())): N,P,T = map(int, input().split()) r.append("#{} {} {}".format(tc+1, min(P,T),P+T-N if N 2021. 7. 8.
[ SWEA ] D3 - 5515, 1208, 4466, 1229, 3142 - python 문제풀이 5515 2016년 요일맞히기 info = [31,29,31,30,31,30,31,31,30,31,30,31] r = {0:3,1:4,2:5,3:6,4:0,5:1,6:2} # 요일에 대응되는 숫자 for tc in range(int(input())): m,d = map(int, input().split()) print("#{} {}".format(tc+1, r[d%7] if m==1 else r[(sum(info[:m-1])+d)%7])) 1208 Flatten 접근법 : 정렬 -> 최대최소 차이비교 -> 반복 ... 만약 차이가 1과 같거나 작아지면 이제 의미 없는 블록 옮기기라 탈출 for tc in range(10): N = int(input()) blocks = sorted(list(map(int.. 2021. 7. 7.