분류 전체보기
-
[프로그래머스] 기사단원의 무기(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 이하인 자연수입니다..
-
[이코테] chap9. 최단 경로Algorithm PS👩🏻💻/개념 2023. 5. 8. 01:40
최단 경로 최단 경로(Shortest Path) : 특정 지점까지 가장 빠르게 도달하는 방법을 찾는 알고리즘. 최단 경로 문제는 보통 그래프를 이용해 표현한다. 각 지점(국가, 학교) -> '노드', 지점간 연결된 도로 ->'간선'으로 표현된다. 코테에선 최단 경로를 출력하는 문제 보단, '최단 거리'를 요구하는 문제가 많이 출제된다. 학부 수준의 다익스트라(Dijkstra) 최단 경로 알고리즘 플로이드 워셜(Floyd-Warshall) 알고리즘 벨만포드 알고리즘 최단 거리 알고리즘엔 3가지가 있지만, 그 중에서도 코테에 자주 등장하는 것은 2가지이므로 이것만 우선적으로 설명한다. 최단 경로 알고리즘의 대표적 유형 3가지 한 지점에서 다른 특정 지점까지의 최단 경로 (다익스트라) 한 지점에서 모든 지점까..
-
[백준] 17276번: 배열 돌리기 (Python)Algorithm PS👩🏻💻/Implementation 2023. 5. 8. 01:34
문제 링크 https://www.acmicpc.net/problem/17276 17276번: 배열 돌리기 각 테스트 케이스에 대해 회전 연산을 마친 후 배열의 상태를 출력한다. n줄에 걸쳐 각 줄에 n개의 정수를 공백으로 구분하여 출력한다. www.acmicpc.net 풀이 코드 시간을 줄이기 위해 코드가 길어졌음. -> 제한 시간이 3초라 안길었어도 될 뻔했다.. 주대각선, 가운데열, 부대각선, 가운데행 이 4가지 줄만 바뀌므로, 원래 배열에서 이 4가지를 빼서 before 배열에 담아둔다. after 배열에 바뀌는 부분만 담는다. 각도에 따라 처음 배열의 주 대각선 원소들이 놓여지는 방향이 다르므로, 규칙에 따라 8가지로 나누었다. (시간 제한이 3초나 되기 때문에 누적해서 계속 돌려도 통과하는 것 ..
-
[백준] 22858번: 원상 복구 (small) (Python)Algorithm PS👩🏻💻/백준 2023. 5. 7. 17:37
문제 링크 https://www.acmicpc.net/problem/22858 22858번: 원상 복구 (small) 수가 적혀있는 $P_1, P_2, ..., P_N$ $N$개의 카드가 있다. 1부터 N까지 수가 하나씩 존재하는 $D_1, D_2, ... , D_i , ... D_N$ 가 있다. 이때 $D_i$는 $P_{D_i}$ 값을 $i$ 번째로 가지고 오는 것을 의미한다. 이러한 www.acmicpc.net 풀이 코드 P 카드를 D의 규칙에 따라 이동하는 문제 원래 카드인 P를 다시 찾는 것이므로 결과 카드인 S를 D의 규칙 반대로 이동시키기. P[Di] 카드를 i번째로 옮기기 -> S[i] 카드를 Di로 옮기기 from copy import deepcopy n, k = map(int, input..
-
[이코테] chap8. 다이나믹 프로그래밍Algorithm PS👩🏻💻/개념 2023. 5. 7. 16:49
최적의 해를 구하기에 시간이 너무 많이 걸리거나 메모리 공간이 많이 필요한 문제가 있다. 이는 컴퓨터의 연산 속도, 메모리 공간에 대한 제약이 걸려 효율적인 알고리즘이 필요하다. 다만, 이런 문제들 중에서도 메모리 공간을 약간 더 사용하여, 속도를 비약적으로 높이는 방법이 있는데 이 중 대표적인 방법이 다이나믹 프로그래밍(Dynamic Programming)기법(동적 계획법)이다. 다이나믹 프로그래밍이란? 한번 해결된 부분 문제의 정답을 메모리에 기록하여, 한번 계산한 답은 다시 계산하지 않도록 하는 문제 해결법 이다. 다이나믹 프로그래밍은 *점화식을 그대로 코드로 옮겨 구현할 수 있다. (점화식: 인접한 항들 사이의 관계식) 대표적인 예시 문제가 피보나치 수열 문제이다. 피보나치 함수 코드 # 피보나치..
-
[백준] 20438번: 출석체크 (Python)Algorithm PS👩🏻💻/백준 2023. 5. 4. 12:47
문제 20438번: 출석체크 1번째 줄에 학생의 수 N, 졸고 있는 학생의 수 K, 지환이가 출석 코드를 보낼 학생의 수 Q, 주어질 구간의 수 M이 주어진다. (1 ≤ K, Q ≤ N ≤ 5,000, 1 ≤ M ≤ 50,000) 2번째 줄과 3번째 줄에 각각 K명 www.acmicpc.net 풀이 코드 1 처음엔 출석 학생부터 누적합을 어떻게 활용해야 하나 고민했는데, 누적합에 대한 개념이 제대로 안섰나보다. 구간 M 누적합 attend = [0] * (N + 3) for i in range(3, N + 3): if not visited[i]: attend[i] = attend[i-1] + 1 else: attend[i] = attend[i-1] # 3. 답 프린트 answer = [] for s, e..