🗂️ 문제https://www.acmicpc.net/problem/1254 💡 접근법주어진 문자열을 가지고 팰린드롬을 만드는 경우는 3가지가 있다.abba와 같이 모든 문자열이 팰린드롬인 경우bcabba와 같이 부분 문자열이 팰린드롬을 만족하는 경우이 경우엔 bc를 뒤집어서 뒤에 붙여주면 모든 문자열이 팰린드롬을 만족한다.abcd와 같이 부분 문자열이 팰린드롬을 만족하지 않는 경우주어진 문자열에서 부분 문자열이 팰린드롬을 만족하는지 여부를 확인해야 하며, 만족하지 않는 경우 팰린드롬을 만들기 위에 맨 뒤에 문자를 추가해야 한다. 주어진 문자열이 bcabba일 때부분 문자열인 bcabba는 팰린드롬을 만족하지 않는다.부분 문자열인 cabba는 팰린드롬을 만족하지 않는다.부분 문자열인 abba는 팰린드..
🗂️ 문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/42583# 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 💡 접근법트럭을 큐(다리)에 차례로 진입시키는데, 이때 시간(second)을 기준으로 한다.시간을 기준으로 총 두 가지의 작업을 수행하며, total_weight 변수를 통해 큐(다리)의 전체 무게를 체크한다.큐에서 0번째 트럭이 다리를 건넜는지 확인한다.만약 다리를 건넜다면, 큐에서 해당 트럭을 삭제한다. (total_weight에서 해당 트럭의 무게도 뺀다)경과 시간 = 현재 시간 - 진입 시간을 확인하여 트럭이 다리..
🗂️ 문제링크: https://www.acmicpc.net/problem/11051 💡 접근법이항 계수란 그냥 조합이다. 즉, (5, 2)란 5C2를 구하는 것이다.이항계수의 성질을 이용하여 동적계획법으로 문제를 풀었으며, 이항계수의 성질은 다음과 같다. nCk = nCn-knCk = n-1Ck + n-1Ck-1파스칼의 삼각형을 본다면 더 쉽게 이해가 가능할 것이다. 위 두 성질을 기반으로 세운 DP 점화식은 다음과 같다.dp[i][k] = dp[i-1][k] + dp[i-1][k-1] (i≥1, k≥1) 추가적으로 코드에서는 1번 성질을 이용해서 for문의 반복횟수를 줄일 수 있다.예시로, 5C2 == 5C3이므로 5//2까지만 순회한다면 5에 대한 모든 조합의 경우를 구할 수 있다.5C0 ==..
🗂️ 문제 링크: https://www.acmicpc.net/problem/9237 💡 접근법최대한 빠르게 모든 묘목을 심고 다 자라게하기 위해서는 자라는 데 오래 걸리는 묘목부터 심어야 한다.따라서 묘목이 자라는 기간을 내림차순으로 정렬한다. 묘목 하나를 심는 데 1일이 소요된다. 이 말은 묘목은 하루에 하나만 심을 수 있다는 말로 해석된다.따라서 묘목을 구입한 1일부터 바로 묘목을 심도록 하자.또한 묘목을 심은 날짜에 묘목이 자라는 데 걸리는 기간을 더한다면 해당 묘목이 모두 자라는 날짜를 구할 수 있다. 예시를 들어 살펴보자.1일에 첫 번째 묘목을 심는다. 이때 첫 번째 묘목이 자라는 데 4일이 걸린다면, 해당 묘목은 5일까지 모두 자란다.2일에 두 번째 묘목을 심는다. 이때 두 번째 묘목이 ..
기여한 프로젝트https://github.com/projectdiscovery/nuclei-templates GitHub - projectdiscovery/nuclei-templates: Community curated list of templates for the nuclei engine to find security vulnerabiCommunity curated list of templates for the nuclei engine to find security vulnerabilities. - projectdiscovery/nuclei-templatesgithub.comNuclei란 애플리케이션, 운영체제, 인프라, 클라우드 플랫폼 및 네트워크를 조사하여 취약점 식별 및 완화를 지원하도록 설계된 ..
🗂️ 문제링크: https://www.acmicpc.net/problem/4948 💡 접근법n보다 크고, 2n보다 작거나 같은 소수의 개수를 구하는 문제이다.이때 여러 케이스에 대해 소수를 판별할 때, 동일한 수에 대한 소수 판별 로직이 반복 수행될 수 있다. 이 과정을 없애고자 is_prime_num 리스트를 생성하여 한 번 소수 판별을 수행한 수에 대해서는 True or False로 값을 저장해두어 로직이 재수행되지 않도록 한다. 😎 내 코드import sysdef is_prime(x): if x == 1: return False for i in range(2, int(x**0.5)+1): if x % i == 0: return False..
🗂️ 문제링크: https://www.acmicpc.net/problem/1929 💡 접근법소수는 1과 자기 자신을 제외한 약수가 존재하지 않아야 한다.소수를 판별하기 위해서는 2부터 √x까지만 나눠보면 된다. x = a * b라고 했을 때 a와 b 중 하나는 반드시 √x 이하이기 때문이다. 예를 들어 x = 36 이라고 할 때약수 쌍: (1, 36), (2, 18), (3, 12), (4, 9), (6, 6), (9, 4), (12, 3), (18, 2), (36, 1)즉, 보면 알 수 있듯이, (4, 9) 이후부터는 대칭적으로 반복된다. 😎 내 코드import sysdef gcd(x): if x == 1: return False elif x == 2 or x == 3: ..
🗂️ 문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/49191# 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 💡 접근법lose_list[i] → i번 선수에게 진 선수들의 리스트와 win_list[i] → i번 선수에게 이긴 선수들의 리스트를 각각 구한다.즉, 단방향 그래프 형식으로 이긴 선수들의 그래프와 진 선수들의 그래프 관계를 나타냈다. i번 선수에게 이긴 선수들과 i번 선수에게 진 선수들을 모두 구한다.만약 순위를 매길 수 있다면, lose_list[i]의 수 + win_list[i]의 수는 n-1일 것이다. 이를 구하기 ..