반응형

➰ 취업준비/알고리즘 문제풀이 39

[Python][프로그래머스] level 1 - 키패드 누르기

🍋 문제 https://programmers.co.kr/learn/courses/30/lessons/67256?language=python3 코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL" programmers.co.kr 문제 설명 스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다. 이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다. 맨 처음 왼손 엄지손가락은 * 키패드에 오른손..

[Python][백준_16918] 봄버맨 (구현)

🍋 문제링크 https://www.acmicpc.net/problem/16918 🍎 코드 제출 기록 (메모리 및 시간) 메모리 : 196844 KB 시간 : 928 ms 🥝 메모 폭탄이 들어있는곳의 문자는 숫자 0이 아니라 대문자 알파벳 O이었다는... 🍓 문제풀이 [ 순서 정리 ] 임의의 칸에 폭탄을 설치한다. - 3초 처음 1초 동안 아무것도 하지 않는다. 다음 1초 동안 폭탄이 설치되어 있지 않은 모든 칸에 폭탄을 설치하고 폭탄의 시간이 0이 된 폭탄은 폭발한다. 3번을 반복 [ 풀이순서 ] 입력받은 map을 통해 각 폭탄의 시간을 저장하고 있는 배열을 생성한다. → 처음에 들어있는 폭탄의 시간은 2로 입력 (처음 1초는 아무일도 하지 않기 때문에) N-1 초동안 아래의 과정을 반복 (처음 1초는 ..

[Python][백준][17086] 아기 상어 2 (BFS)

🍋 문제링크 https://www.acmicpc.net/problem/17086 🍎 코드 제출 기록 (메모리 및 시간) 메모리 : 135476 KB 시간 : 1008 ms 🥝 메모 nx = x + dx[i] *1, ny = y + dy[i] *1nx = x + dx[i] *2, ny = y + dy[i] *2 이런 식으로 완전탐색을 수행하면 아래의 그림과 같이 ✔️ 부분이 확인되지 않기때문에 틀림! nx = x + dx[i] *2, ny = y + dy[i] *2 🍉 Code import copy N, M = map(int, input().split()) shark = [] for i in range(N): shark.append(list(map(int, input().split()))) dx = [-1..

[C++][백준][17086] 아기 상어 2 (BFS)

🍋 문제링크 17086번: 아기 상어 2 첫째 줄에 공간의 크기 N과 M(2 ≤ N, M ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 공간의 상태가 주어지며, 0은 빈 칸, 1은 아기 상어가 있는 칸이다. 빈 칸의 개수가 한 개 이상인 입력만 주어진다. www.acmicpc.net 🍎 코드 제출 기록 (메모리 및 시간) 메모리 : 135476 KB 시간 : 132 ms 🥝 메모 nx = x + dx[i] *1, ny = y + dy[i] *1nx = x + dx[i] *2, ny = y + dy[i] *2 이런 식으로 완전탐색을 수행하면 아래의 그림과 같이 ✔️ 부분이 확인되지 않기때문에 틀림! nx = x + dx[i] *2, ny = y + dy[i] *2 🍉 Code #include #inclu..

[Python][백준][16931] 겉넓이 구하기 (구현)

🍋 문제링크 https://www.acmicpc.net/problem/16931 🍎 코드 제출 기록 (메모리 및 시간) 메모리 : 123532 KB 시간 : 132 ms 🍓 문제풀이 겉넓이를 구하기 위해서는 입체도형의 up, down, front, back, left, right 에서 보이는 사각형들의 합을 구하면 된다 up, down = N * M left, right = 1 ~ N 에서 맨 앞 블록 높이 + (j번째 블록높이 - (j-1)번째 블록높이) → 양수일때만 front, back = 1 ~ M 에서 맨 앞 블록 높이 + (i번째 블록높이 - (i-1)번째 블록높이) → 양수일때만 🍉 Code N, M = map(int, input().split()) arr = [list(map(int, in..

[Python][백준][11051] 이항 계수 2 (DP)

🍋 문제링크 11051번: 이항 계수 2 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net 🍎 코드 제출 기록 (메모리 및 시간) 메모리 : 204292 KB 시간 : 268 ms 🍓 문제풀이 k 가 0 일때! 빼먹지 않을 것!! 🍉 Code 재귀로 푸니까 시간초과남...ㅠ N, K = map(int, input().split()) def recursion(n, k): if n == k: return 1 if k == 1: return n return recursion(n-1, k-1) + recursion(n-1, k) print(recursion(N, K)) N, K = map(int, input().spl..

[Python][프로그래머스] Level 3 - 순위(그래프)

🍋 문제링크 코딩테스트 연습 - 순위 5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2 programmers.co.kr 🍓 문제풀이 해당 문제는 BFS와 visited 를 사용해서 풀었습니다. 일단은, 매개변수로 들어오는 results 는 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 으로 보기 쉽지 않게 저장되어있기 때문에 아래와 같이 i 가 j 를 이겼다면 win의 의미로 arr[i][j] = 'w' i 가 j 에게 졌다면 lose 의 의미로 arr[i][j] = 'l' 아무 승패관계가 없는 칸은 nothing의 의미로 arr[i][j] = 'n'으로 2차원 배열 새롭게 저장하였습니다. 그 후 arr[i][j] 를 돌면서 각 칸이 자기 자신과의..

[삼성/코테기출][Python][백준][14501] 퇴사 (완전탐색/DP)

🍋 문제링크 https://www.acmicpc.net/problem/14501 🍎 코드 제출 기록 (메모리 및 시간) 메모리 : 121220 KB 시간 : 112 ms 🍓 문제풀이 🍉 Code N = int(input()) time = [0 for _ in range(N)] pay = [0 for _ in range(N)] DP = [0 for _ in range(N+1)] for i in range(N): tmp = list(map(int, input().split())) time[i] = tmp[0] pay[i] = tmp[1] DP[N] = 0 for i in range(N-1, -1, -1): if (N-i) < time[i]: DP[i] = DP[i+1] else: DP[i] = max(pay..

[삼성/코테기출][Python][백준][14889] 스타트와 링크 (완전탐색/백트래킹)

🍋 문제링크 https://www.acmicpc.net/problem/14889 🍎 코드 제출 기록 (메모리 및 시간) 메모리 : 149476 KB 시간 : 1252 ms 🍓 문제풀이 파이썬으로 조합 만들기 def my_combinations(arr, r): for i in range(len(arr)): if r == 1: yield [arr[i]] else: for next in my_combinations(arr[i+1:], r-1): yield [arr[i]] + next 🍉 Code N = int(input()) power = [list(map(int, input().split())) for _ in range(N)] member = [] for i in range(N): member.append..

[삼성/코테기출][Python][백준][14888] 연산자 끼워넣기 (완전탐색/백트래킹/순열)

🍋 문제링크 https://www.acmicpc.net/problem/14888 🍎 코드 제출 기록 (메모리 및 시간) 메모리 : 160196 KB 시간 : 4694 ms 🍉 Code N = int(input()) number = list(map(int, input().split())) operator = [] tmp = list(map(int, input().split())) for i in range(4): if tmp[i] > 0: if i == 0: for j in range(tmp[i]): operator.append("+") if i == 1: for j in range(tmp[i]): operator.append("-") if i == 2: for j in range(tmp[i]): oper..