본문 바로가기
반응형

전체 글288

[BOJ][Python]1748번 풀이 https://www.acmicpc.net/problem/1748 1748번: 수 이어 쓰기 1 첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다. www.acmicpc.net n = int(input()) num = [100000000,10000000,1000000,100000,10000,1000,100,10,0] ans = 0 for i in num: if n =0: ans += (n-i+1)*len(str(i)) n = int('9'*(len(str(i-1)))) print(ans) 아마 파이썬을 쓰시는 분은 다들 보자마자 문자열로 바꿔서 다 더한다음에 길이 출력하면 되겠네 하고 생각하셨을 것 같습니다. 저도 그랬구요. 다만 문제를 내신 분들도 그걸 고려해서인지 그렇게 풀면 시간초과가 .. 2022. 6. 23.
[BOJ][Python]7576번 풀이 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net import sys from collections import deque ssr = sys.stdin.readline def sol(r,c,day): if visited[r][c] == True: return visited[r][c] = True for i in range(4): if 0 2022. 6. 23.
[BOJ][Python]2960번 풀이 https://www.acmicpc.net/problem/2960 2960번: 에라토스테네스의 체 2, 4, 6, 8, 10, 3, 9, 5, 7 순서대로 지워진다. 7번째 지워진 수는 9이다. www.acmicpc.net n,k = map(int, input().split()) num = [i for i in range(2,n+1)] cnt = 0 while num: p = num[0] for i in num: if i%p == 0: num.remove(i) cnt += 1 if cnt == k: print(i) break 에라토스테네스의 체 문제는 백준에 상당히 많은데요. 그 중에서도 쉬운 편이 아닌가 생각합니다. 일단 n의 최대 범위가 1000까지이기 때문에 이중 반복문의 최대가 10^6번의 연산이.. 2022. 6. 22.
[BOJ][Python]1931번 풀이 https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net import sys ssr = sys.stdin.readline n = int(ssr()) c = [list(map(int, ssr().split())) for _ in range(n)] c.sort(key= lambda x:(x[1], x[0])) cnt = 1 end = c[0][1] for i in range(1, n): if c[i][0] >= end: cnt += 1 end = c[i][1] print(cnt) 이번 문제는 푸는 방법을 어떻게든 생각해내는게 전부인 문제입니다. 다르게 말하면 푸는 방법을 .. 2022. 6. 21.
[BOJ][Python]10162번 풀이 https://www.acmicpc.net/problem/10162 10162번: 전자레인지 3개의 시간조절용 버튼 A B C가 달린 전자레인지가 있다. 각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 버튼 A, B, C에 지정된 시간은 www.acmicpc.net t = int(input()) b= [300,60,10] ans=[] if t%10 != 0: print(-1) else: for i in range(3): cnt = 0 cnt += t//b[i] t = t%b[i] ans.append(cnt) print(*ans) 이번 문제는 그리디 알고리즘입니다. 크게 어려운 문제는 아니고 천천히 문제에서 시키는 사항을 따라가면 풀 수 있는 문제입니.. 2022. 6. 18.
[BOJ][Python]1697번 풀이 https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net from collections import deque n,k = map(int, input().split()) q = deque([[n,0]]) visited = [False for _ in range(100001)] visited[n] = True while 1: if n == k: print(0) break p = q.popleft() a = p[0]-1 b = p[.. 2022. 6. 16.
[BOJ][Python]11724번 풀이 https://www.acmicpc.net/problem/11724 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net import sys input = sys.stdin.readline sys.setrecursionlimit(10000) def sol(v): if visited[v] == True: return else: visited[v] = True for i in range(len(edges)): if edges[i][0] == v: sol(ed.. 2022. 6. 16.
[BOJ][Python]2161번 풀이 https://www.acmicpc.net/problem/2161 2161번: 카드1 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net from collections import deque n = int(input()) d = deque([i for i in range(1,n+1)]) while len(d)>1: print(d.popleft()) d.append(d.popleft()) print(d.popleft()) 예전에 이런 비슷한 문제를 풀었던 기억이 있는데요. 그 때는 데크를 쓸 줄 몰라서 그냥 리스트로 어찌어찌 풀었던 .. 2022. 6. 14.
[BOJ][Python]11279번 풀이 https://www.acmicpc.net/problem/11279 11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 www.acmicpc.net import heapq import sys ssr = sys.stdin.readline n = int(ssr()) h = [] for _ in range(n): a = int(ssr()) if a > 0: heapq.heappush(h,-a) else: if len(h) == 0: print(0) else: print(-heapq.heappop(h)) 이번엔 최대힙입니다. 파이.. 2022. 6. 14.
[CS]시리얼 통신(Serial Communication) 이번에는 시리얼 통신에 대해서 적어보겠습니다. 지금은 왜 그랬는지 모르겠지만 학부생 때 꽤 어려워했던 기능중에 하나였는데요. 개념은 이해가 되는데 막상 실습을 해보면 뭐가 자꾸 제대로 안되고 데이터가 꼬이고 하면서 꽤 힘들었던 실습이었다는 기억이 있습니다. 시리얼 통신이란? 직렬 통신이라고도 부르는 시리얼 통신은 데이터를 통신 채널을 거쳐서 보낼 때 한번에 하나의 비트 단위로 데이터를 전송하는 통신 방식을 말합니다. 시리얼 통신과 대조적인 방식으로 병렬 통신(Parallel Communication)이 있는데 해당 방법은 여러 통신 채널을 이용해서 데이터를 한번에 여러 개의 데이터를 보내는 방식입니다. 간단하게 두 가지 방법의 차이를 나타내보면, 보낼 데이터 : '012345' 병렬: 0 1 2 3 4 .. 2022. 6. 13.
반응형