목록백준 문제 풀이 (154)
황소개발자
시험시간은 2시간. 알고리즘 3문제 데이터베이스 1문제 웹 자바스크립트 fetchApi 처리 1문제 로 구성되었다. . 첫 번째 문제는 dp 꼴의 문제였다. 주어진 조건에서 관련없는 수 들을 제거해주고, 20분만에 구현해서 풀었다. 그리고 두 번째 문제와 세 번째 문제를 한번 쓱 스캔해주고 데이터 베이스 문제로 넘어갔다. 아니 근데 데이터 베이스 문제 예시가 이상해서 내가 계속 잘못 푼건가 10~20분은 끈거 같다.. 다행히 예시가 오기 돼있음이 공지되었고 바로 알고리즘 2번째 문제로 다시 갔다. 보니까 바로 아이디어가 안떠올랐다 이 눔이 bfs도 아닌 것이.. 카다가 3번째 문제로 다시 넘어갔고 처음엔 dp 문제인줄 알았으나 조합을 이용한 구현 문제였고 다시 2번 문제에 도전했다. 다시 보니 아이디어가..
import sys input = sys.stdin.readline n = int(input()) mat = [] for i in range(n): mat.append(list(map(int, input().split()))) dp = [[0 for _ in range(n)] for _ in range(n)] dp[0][0] = 1 for y in range(n): for x in range(n): if mat[y][x] == 0: break nx = x + mat[y][x] ny = y + mat[y][x] if 0
bfs로 풀어보았다. 다이나믹이 아닌 import sys input = sys.stdin.readline from collections import deque n, m = map(int, input().split()) mat = [] for i in range(n): mat.append(list(map(int, input().split()))) score = [[-1 for i in range(m)] for j in range(n)] score[0][0] = mat[0][0] dx = [1, 0] dy = [0, 1] def bfs(y, x): q = deque() q.append([y, x]) while q: y, x = q.popleft() for i in range(2): ny = y + dy[i]..
각 자리의 중요도를 기록한다 A 가 100의 자리와 1의 자리에 있다면 A 는 101 의 중요도를 갖는것. . 알파벳 총 개수는 26개이다. 외워두자. 모든 알파벳에 대해 중요도를 기록하고 높은거 순서대로 9부터 1까지 곱해준다. t = int(input()) ss = [] for _ in range(t): ss.append(input()) alphabet = [0 for i in range(26)] for s in ss: i = 0 while s: now = s[-1] alphabet[ord(now) - ord('A')] += pow(10, i) i += 1 s = s[:-1] alphabet.sort(reverse=True) ans = 0 for i in range(9, 0, -1): ans += i..
아직 난 멍청이다 N과 M 그렇게 풀어놓고 이걸 생각하지 못하다니 재귀에서 for 1~10 돌리면 모든 케이스 체크 가능하다. 중복 안되려면 check 배열 만들어서 T F 해주면된다 레바스님의 풀이이다. n = int(input()) op = input().split() c = [False] * 10 mx, mn = "", "" def possible(i, j, k): if k == '': return i > j return True def solve(cnt, s): global mx, mn if cnt == n + 1: if not len(mn): mn = s else: mx = s return for i in range(10): if not c[i]: if cnt == 0 or possible(s[..
식은 n이 120일 때 1 * (10 - 1) + 2 * (100 - 10) + 3 * (120 - 100 + 1) 이런식. 구현하면 다음과 같다 n = int(input()) length = len(str(n)) ans = 0 for i in range(1, length): ans += i * (pow(10, i) - pow(10, i - 1)) ans += length * (n - pow(10, length - 1) + 1) print(ans)
10 다음엔 0이 아니라 1이다. 그래서 x - 1, y - 1 해주고 x - 1 부터 시작하는데, M 씩 증가시켜가면서 N, y 만족하는 수를 찾아주는 거다. 찾았으면 + 1 해줘서 그 수를 기록한다 못찾았으면 -1이 그대로 나갈 것이다. import sys input = sys.stdin.readline t = int(input()) for _ in range(t): M, N, x, y = map(int, input().split()) x, y = x - 1, y - 1 ans = -1 for i in range(x, M * N + 1, M): if i % N == y: ans = i + 1 break print(ans)
예외처리를 좀 해줘야하는 문제이다. bgoodsamari님이 반례 모음을 올려주셨다. https://www.acmicpc.net/board/view/46120 위 링크에 반례들이 모여있다. n = int(input()) m = int(input()) ms = [] if m != 0: ms = list(input().split()) ans = 999999999 length = 0 for i in range(1000000): broken = False for s in str(i): if s in ms: broken = True if broken: pass else: if ans > abs(n - i): ans = abs(n - i) length = len(str(i)) ans = min(ans + lengt..