전체 글
-
[백준] 21314번: 민겸 수(Python)Algorithm PS👩🏻💻/백준 2023. 5. 14. 14:29
문제 링크 https://www.acmicpc.net/problem/21314 21314번: 민겸 수 민겸 수 하나가 주어진다. 민겸 수는 대문자 M과 K로만 이루어진 문자열이며, 길이는 3,000을 넘지 않는다. www.acmicpc.net 풀이 풀이 설명 우선 문장에 K 포함 유무에 따라 나뉜다. K가 없는 경우 -> M만 있다는 뜻. result를 바로 구할 수 있다. ex. MMM인 경우 max: 111, min: 100 K가 있는 경우, K를 기준으로 나뉘기 수가 결정되므로 K의 위치를 담은 리스트(k_pos)를 전달해준다. def find_max(k_pos) # max 값을 찾는다. k를 포함하여 $5*10^N$ 꼴로 정리한다. 문장의 끝이 k가 아니라면, m으로 끝난다는 뜻이므로 마지막 k의..
-
[백준] 16926번: 배열 돌리기1(Python)Algorithm PS👩🏻💻/Implementation 2023. 5. 10. 13:28
문제 https://www.acmicpc.net/problem/16926 16926번: 배열 돌리기 1 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] www.acmicpc.net 문제 풀이 회전하는 행렬의 인덱스들을 1차원 배열로 뽑아 놓는다.(반시계방향으로) ex. n, m, r = 2, 3, 2 array = [[1, 2, 3], [4, 5, 6]] [(0, 0), (1, 0), (1, 1), (1, 2), (0, 2), (0, 1)] #위치 인덱스를 담은 배열 회전수 ..
-
[백준] 2615번: 오목 (완전탐색, Python)Algorithm PS👩🏻💻/백준 2023. 5. 10. 02:32
문제https://www.acmicpc.net/problem/2615 2615번: 오목오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호www.acmicpc.net 문제 풀이출력해야하는 제일 왼쪽(세로줄은 가장 위쪽) 좌표를 기준으로 [주 대각선, 세로줄, 가로줄, 부 대각선] 순으로 하여 4개의 방향을 탐색했다. (BFS)단, 조건으로 6개 연속인 바둑알은 승리가 아니므로, 연속된 조건의 count를 자신을 제외하고 각 방향으로 5번까지 진행한 후연속된 바둑알의 갯수가 4개인 경우(기준 좌표 제외)만 승리로 간주한다.n = 19blacks = []white..
-
[백준] 2887번: 행성 터널(그래프, Python)Algorithm PS👩🏻💻/백준 2023. 5. 10. 02:21
백준-행성터널(2887) 문제문제때는 2040년, 이민혁은 우주에 자신만의 왕국을 만들었다. 왕국은 N개의 행성으로 이루어져 있다. 민혁이는 이 행성을 효율적으로 지배하기 위해서 행성을 연결하는 터널을 만들려고 한다.행성은 3차원 좌표위의 한 점으로 생각하면 된다. 두 행성 A(xA, yA, zA)와 B(xB, yB, zB)를 터널로 연결할 때 드는 비용은 min(|xA-xB|, |yA-yB|, |zA-zB|)이다.민혁이는 터널을 총 N-1개 건설해서 모든 행성이 서로 연결되게 하려고 한다. 이때, 모든 행성을 터널로 연결하는데 필요한 최소 비용을 구하는 프로그램을 작성하시오.입력첫째 줄에 행성의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 다음 N개 줄에는 각 행성의 x, y, z좌표가 주어진..
-
[프로그래머스] 기사단원의 무기(Python)Algorithm PS👩🏻💻/프로그래머스 2023. 5. 10. 02:00
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/136798 코드 def solution(number, limit, power): arms = [] for n in range(1, number + 1): temp = [] for i in range(1, int(n ** 0.5)+1): if n % i == 0: temp.append(i) if i ** 2 != n: temp.append(n//i) arms.append(power if len(temp) > limit else len(temp)) return sum(arms)
-
[프로그래머스] 개인정보 수집 유효기간(Python)Algorithm PS👩🏻💻/프로그래머스 2023. 5. 10. 01:59
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/150370 후기 : 처음엔 약관의 기간이 월 기준이라 Month, year 가 12월이 넘어가면 변경하고, day는 유지하는 식으로 했지만, 그래도 결국엔 변경된 날짜 & 오늘 날짜를 비교해야 하므로, datetime을 쓰다가 결국 시간 초과가 났다. (계산, datetime 쓰기 위해 형변환 많이써서 그런듯..) 각 달의 날짜 수(day)가 동일하면, 날짜 비교 시 가장 빠른 방법은 날짜 수 연산이다. 코드 def solution(today, terms, privacies): answer = [] dict_term = {} for term in terms: k, v = term.split..
-
[프로그래머스] 타켓 넘버(Python)Algorithm PS👩🏻💻/프로그래머스 2023. 5. 10. 01:58
문제 링크 - 타겟 넘버(43165) 문제 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 주어지는 숫자의 개수는 2개 이상 20개 이하입니다. 각 숫자는 1 이상 50 이하인 자연수입니다..