목록분류 전체보기 (163)
Bamboo is coming
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cgkOwT/btrqysRux2b/q8XmlidooSLtcWSA491tP1/img.png)
- 알고리즘 분류 : 정렬 #백준 10989 수 정렬하기3 실버5(메모리제한) import sys input = sys.stdin.readline N = int(input()) A = [0] * 10001 for i in range(N): A[int(input())] += 1 for i in range(10001): if A[i] != 0: for j in range(A[i]): print(i) 배열의 인덱스를 활용해서 정렬하는 방법도 있구나..!
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/W4JHQ/btrqAboa5rk/fhuAYkHhoZaCo1OlZ5EKuK/img.png)
- 알고리즘 분류 : 정렬 #백준 2751 수 정렬하기2 실버5 import sys input=sys.stdin.readline write=sys.stdout.write N = int(input()) A = [] for i in range(N): A.append(int(input())) A.sort() write('\n'.join(map(str,A))) 바로 다음 문제에서 효율성을 개선하는 문제가 나왔다. sys로 효율성 높이기 전에 문제 그대로 넣었다가 시간초과가 났다. ㅋㅋㅋ
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bDYJMd/btrqunJ5jk3/C49OyES6zQYyKXgEdlN8FK/img.png)
- 알고리즘 분류 : 구현, 정렬 #백준 2750 수 정렬하기 브론즈1 N = int(input()) A = [] for i in range(N): A.append(int(input())) A.sort() for i in range(N): print(A[i]) 간단한 문제여서 sys 임포트할 필요 없다고 생각했는데 무조건 시간이 줄어들면 좋으니까 sys를 사용해야겠다. ㅠㅠ 나는 시간이 108ms인데 다른분들은 50ms 이길래 확인해봤더니 sys가 들어가서 그런거였다. print도 sys.stdout.write로 출력하기! ('n'.join(map(str,A)))으로 출력하기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bI8JQ9/btrqum5tXyz/gPMVaIpMe0zNUzestmeVH0/img.png)
- 알고리즘 분류 : 이분탐색 #백준 1920 수찾기 실버4 import sys input = sys.stdin.readline N = int(input()) A = list(map(int,input().split())) M = int(input()) S = list(map(int,input().split())) A.sort() for i in S: check = 0 start,end = 0,len(A)-1 while start i: end = mid - 1 elif A[mid] < i: start = mid +1 print(result) 완전탐색보다 시간복잡도가 훨씬 단축된다고 한다. 배울게 많다..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cAhSKW/btrquP7JZNi/dKYUII0IkVHqfyDhVtGkm0/img.png)
- 알고리즘 분류 : 완전탐색 def solution(brown, yellow): total = brown + yellow answer = [] for col in range(3,total): row = int(total/col) if((col*row==total) & (col>=row)&((col-2)*(row-2)==yellow)): answer = [col,row] break return answer if 조건 1. row * col == total 2. col >= row (가로 >= 세로) 3. (col-2) * (row-2) == yellow 이걸 약수로 풀려고 했다..ㅋ .. ㅠ
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bwczx1/btrqAb9xc7L/aXmuHpzf74ZdpEIPnEtugk/img.png)
- 알고리즘 분류 : 트리 # 백준 20364 부동산다툼 실버2 import sys input = sys.stdin.readline N,Q = map(int,input().split()) #땅개수 N, 오리수 Q m = [0 for _ in range(N+1)] #방문여부 for i in range(Q): X = int(input()) #오리가 원하는 땅 X tmp = X res = 0 #방문가능 기본값 while tmp > 1: #땅까지 가는길 표시 위함 if m[tmp] == 1: #방문했으면 res = tmp #처음 마주치는 점유된 땅 tmp = tmp >> 1 # 8->4->2->1 print(res) #res를 계속 덮어쓰기 해서 최초 집 찾기 if res == 0: #가는 길에 방문한 적 없으..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dJPuOb/btrqAnBTQ5R/UgtknpYQ50Xmut4oJ2kKYk/img.png)
- 알고리즘 분류 : 그래프, 트리 6월 이후로 처음 푸는 그래프 문제다보니 어떻게 처리해야할지 보자마자 약간 멘붕이 왔다. ㅠㅠ #백준 9372번 상근이의 여행 실버4 from collections import deque import sys input = sys.stdin.readline def bfs(a): q = deque() q.append(a) check[a] = 1 cnt = 0 while q: a = q.popleft() for i in node[a]: if check[i] == 0: check[i] = 1 cnt += 1 q.append(i) return cnt T = int(input()) #테스트 케이스의 수 for _ in range(T): N,M = map(int,input().sp..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bYonm6/btrqtTQlatk/3fDPPdQV5np1srPk4tbgJK/img.png)
- 알고리즘 분류 : 그래프, 트리 6월 이후로 처음 푸는 그래프 문제다보니 어떻게 처리해야할지 보자마자 약간 멘붕이 왔다. ㅠㅠ #백준 9372번 상근이의 여행 실버4 from collections import deque import sys input = sys.stdin.readline def bfs(a): q = deque() q.append(a) check[a] = 1 cnt = 0 while q: a = q.popleft() for i in node[a]: if check[i] == 0: check[i] = 1 cnt += 1 q.append(i) return cnt T = int(input()) #테스트 케이스의 수 for _ in range(T): N,M = map(int,input().sp..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ptwdV/btrqujBdtuG/SVheQn02Edq76mXTYpSjgk/img.png)
해시를 사용하는 문제였다. 동명이인 때문에 좀 어려웠다. 첫번째 시도에서는 틀렸다. 첫번째 시도 -> 60점 def solution(participant, completion): participant.sort() completion.sort() for i in completion: participant.remove(i) answer = participant[0] return answer 효율성에서 10점 밖에 못받았다. 두번째 시도 -> 100점 def solution(participant, completion): participant.sort() completion.sort() completion.append('1') for i in range(len(participant)): if participan..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dKBLFZ/btrqAn9ITnq/3IKR8pTc4z7IvBqY5SHMKk/img.png)
- 알고리즘 분류 : 자료구조, 그리디 알고리즘, 스택 코드가 길어져서 약간 지저분하다.. 최대값 X, 입장줄 visitors로 각각 받은 후 str인 visitor 입장줄을 list로 변환시켜 check로 담았다. 남자와 여자의 수를 비교하기 위해 M,W 변수로 각각 담아서 if문으로 검증하고 있다. #백준 5002 도어맨 실버1 X = int(input()) #기억할 수 있는 남녀차의 최대값 visitors = input() #입장 check = list(visitors) M,W = 0,0 #남자,여자 for i in range(len(check)): if abs(M-W) < X: #기억할 수 있는 남녀차를 초과하지 않으면 if check[i] == 'W': W += 1 else: M += 1 els..