본문 바로가기

CodingTest/Baekjun Online Judge

(111)
[ BOJ / 파이썬 ] 5397 키로거 커서 움직이는 것에 대한 조작 문제이다. 쉬워보여서 덤볐다가 못 풀었다. 진짜 쓰렸는데, 다른 분들 풀이 보니까 접근법이 어느정도 유형화되어 있는 것 같고, 도저히 혼자서는 못 풀었을 것 같은 느낌이라 잘 후퇴했다 싶었다. 비슷한 문제도 있는 것 같으니 다음에 비슷한 방식으로 출제되었을 때 풀어내기만 하면 된다. https://tturbo0824.tistory.com/23 백준 파이썬 5397번: 키로거 https://www.acmicpc.net/problem/5397 5397번: 키로거 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 tturbo0824.tistory.com 이 분이 친절하게 유사 유형..
[ BOJ / 파이썬 ] 3273 두 수의 합 / 제출 1 / 처음에 인풋 값 저렇게 큰 줄 모르고 n^2으로 해서 시간 초과 import sys input = sys.stdin.readline n = int(input()) nums = list(map(int, input().split())) x = int(input()) sub_nums = list(map(lambda i: abs(i-x), nums)) count = 0 for sub_num in sub_nums: if sub_num in nums: count += 1 print(count//2) / 제출 2 / https://baby-ohgu.tistory.com/12 [백준 3273] 두 수의 합 (Python) www.acmicpc.net/problem/3273 3273번: 두 수의 합 n개..
[ BOJ / 파이썬 ] 1475 방 번호 / 제출 1 / import sys import math n = input() nums = [0 for i in range(10)] for i in range(10): nums[i] = n.count(str(i)) yookgoo = math.ceil((nums[6] + nums[9]) / 2) nums[6] , nums[9] = yookgoo, yookgoo print(max(nums)) 맞기는 했는데 코드가 안 예쁜 느낌.. 저 6과 9를 채우는 문법이 마음에 들지 않는다. / 다른 분들 코드 / ans = [0] * 10 for i in range(len(word)): num = int(word[i]) if num == 6 or num == 9: if ans[6]
[ BOJ / 파이썬 ] 2577 숫자의 개수 / 제출 1 / import sys num = 1 for i in range(3): num *= int(input()) intNumList = [0 for _ in range(10)] for n in str(num): intNumList[int(n)] += 1 for n in intNumList: print(n) / 남의 코드 / a = int(input()) b = int(input()) c = int(input()) m = str(a*b*c) for i in range(10): print(m.count(str(i))) : 음 가만 보면 나는 count()함수를 쓸 생각 거의 안 한다. 보통. 잘 안 익는 함수인데 다른 사람들은 많이 이용한다.
[ BOJ / 파이썬 ] 1012 유기농 배추 / 첫 번째 제출 / import sys from collections import deque input = sys.stdin.readline T = int(input()) dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] for t in range(T): # 초기화 ## 가로, 세로, 배추 개수 m, n, k = map(int, input().split()) farm = [[0] * m for _ in range(n)] visited = [[False] * m for _ in range(n)] q = deque([]) cabbageq = deque([]) for i in range(k): y, x = map(int, input().split()) farm[x][y] = 1 worm =..
[ BOJ / 파이썬 ] 1912 연속합 으 .. 아직 DP연습량이 안 쌓인건 알았지만, 이렇게 DP아이디어가 아예 안 떠오를 줄은 몰랐다. 심지어 1시간 지나고 포기한 이제야 아 이게 DP문제라서 풀려고 선택한 문제지.. 라고 풀이유형이 이제 생각난다. 진작에 생각 났어도 몰랐겠지만.. ㅎ 계속 경험치 쌓자. 1차 아이디어. 쭉 가다가 감소 나오면 일단 끊는다. 그리고 이전에 끊긴 양수값과 비교해 큰 값을 남겨놓는다. => 문제 로직에 안 맞음. 2차 아이디어. 나름 참신하게 한다고 했는데 그냥 1차 아이디어를 뒤에서부터 접근하는 식이 되었다. 각 값에 이어지는 최댓값을 따로 테이블에 적어줄 뿐이었다. 메모제이션스럽게 한다고 흉내낸 생각인데 스스로 반례 발견해서 포기. 애초에 잘못된 접근인걸지도. 3차 아이디어. 일단 전체 데이터 쭉 훑으면서..
[ BOJ / 파이썬 ] 11659 구간 합 구하기 4 아 나는 확실히 PS를 잘 못 풀고 있었던 것일까? 아니면 시간을 들였기 때문에 이제야 문제 푸는 느낌나게 푸는건가? 이제야 뭔가 로직이 로직답게 만들어지는 것 같다. 0) 문제 정의 n개의 문자 배열 중에 i , j 받았을 때 i~j 범위의 문자 배열 값들의 합 1) DP테이블 정의 dp[n]은 n까지의 num들의 합 dp[j] = dp[j-1] + num[j] 2) 점화식 구하기 보통 순차적인 합이 있을 때, 특히 DP테이블의 누적 합이므로 dp [j] ~ dp[i] = dp[j] - dp[i-1] 3) 초기값 dp[0] = 0으로 해주고, num에 따라서 합을 누적해서 넣어서 dp테이블 채우기. / 첫 번째 제출 / import sys input = sys.stdin.readline n, m = m..
[ BOJ / 파이썬 ] 11726 2xn 타일링 사실 수학적 센스가 필요한 문제라 처음 만나면 풀어낼 자신은 없다. 대신 해설을 보고나면 구현 자체는 어렵지 않다. DP문제는 많이 풀어보는 것이 힘! 코딩테스트는 경험이 힘! 해당 문제는 일단 DP로 풀 수 있다는 것을 알아채기도 까다로운 것 같다. 그런데 점화식을 세우는게 진짜 아리송하다. 다만 우리에게 주어진 경우의 수가 사실은 몇 개 되지 않는다는 사실, 배치가 중복된다는 사실을 파악하면 되는 문제다. 2 x 1 1 x 2 를 놓는데, dp테이블을 dp[i] 가 2 x i 를 채우는 방법의 수라고 할 때, dp[1] = dp[n-1] 이다. 왜? 2 x n 바닥에서 2 x 1을 뺐으니 남은 건 2 x (n-1) 바닥이기 때문에. 2 x (n-1) 바닥을 채우는 수와 같기 때문. 1 x 2 의 경우..
[ BOJ / 파이썬 ] 1149 RGB거리 import sys input = sys.stdin.readline n = int(input()) R = [] G = [] B = [] for i in range(n): r, g, b = map(int, input().split()) R.append(r) G.append(g) B.append(b) d = [[0] * 3 for _ in range(n)] d[0][0] = R[0] d[0][1] = G[0] d[0][2] = B[0] for i in range(1, n): d[i][0] = min(d[i-1][1], d[i-1][2]) + R[i] d[i][1] = min(d[i-1][0], d[i-1][2]) + G[i] d[i][2] = min(d[i-1][0], d[i-1][1]) + B[i] pri..
[ BOJ / 파이썬] 2579 계단 오르기 정말 간만에 PS문제 푸니까 또 재밌고 할 만한 것 같다. 그리고 조금 원리를 이해해서 푸는 느낌이 나니 문제 풀이력이 느는 느낌이 확실히 든다. 역시 일이 진행되다가 너무 답도 없이 고여버리면 잠시 쉬고 오는 것도 ( 노는게 아니라 비슷한 다른 일 ..^^) 좋은 것 같다. 사담은 여기까지 하고, 우선 해당 문제가 DP라는 정보를 알고 부딪힐 수 있었다. 그래서 더 답에 빠르게 가까워진 것 같다. 1. DP테이블을 어떻게 구성할 지, 어떤 내용을 담을 지를 결정하고, 2. 점화식을 세우고 3. 초기값을 셋팅하는 식으로 풀어라 라고 배웠다. 되게 초보자 티 내는 듯이, DP테이블을 무조건 1차형으로 사용해야한다고 생각했다. 문제 풀이 경험의 부족 때문일 것이다. 이 값을 갖는 계단이 n개 있으므로 1줄의..