본문 바로가기

코딩테스트6

[백준 1456] 거의 소수 Python 풀이 [백준 1456] 거의 소수 Python 풀이📌 문제 분석이 문제는 주어진 범위 내에서 소수의 거듭제곱의 개수를 구하는 문제입니다. 주어진 범위 [left, right]에서 소수의 거듭제곱으로 나타낼 수 있는 숫자들이 몇 개인지 구해야 합니다.핵심 포인트소수의 거듭제곱이란, 소수를 n번 곱한 수들을 의미합니다. 예를 들어, 2^1, 2^2, 3^2, 3^3 등이 해당됩니다.이 문제는 범위가 10^7까지 주어지기 때문에 효율적으로 소수를 구하는 방법이 필요합니다.🚨 시행착오처음에는 소수를 구하는 방식과 거듭제곱을 구하는 방식에서 몇 가지 문제에 직면했습니다.처음 코드의 문제점초기에는 소수 구하는 방법이 효율적이지 않았고, 범위가 커서 실행 시간이 오래 걸렸습니다.거듭제곱을 구할 때 한 번에 범위 내에 .. 2025. 3. 7.
[백준 2011] 암호코드 Python 풀이 [백준 2011] 암호코드 Python 풀이📌 문제 분석알파벳을 숫자로 암호화한 코드가 주어졌을 때, 가능한 해석의 경우의 수를 구하는 문제입니다A=1, B=2, ..., Z=26으로 암호화되어 있습니다해석할 수 없는 경우는 0을 출력해야 합니다🚨 시행착오처음에는 단순 재귀로 접근했다가 시간 초과가 발생했습니다중복되는 부분 문제가 많아 DP를 사용하기로 결정했습니다처음 코드의 문제점재귀 호출이 지수적으로 증가하여 시간 복잡도가 O(2^n)이 되었습니다같은 인덱스에 대한 계산이 중복되어 비효율적이었습니다어떻게 고쳤나요?DP 테이블을 활용하여 중복 계산을 제거했습니다bottom-up 방식으로 해결하여 시간 복잡도를 O(n)으로 개선했습니다💡 해결 방안s = input().strip()n = len(s).. 2025. 2. 27.
[백준 2240] 자두나무 Python 풀이 [백준 2240] 자두나무 Python 풀이📌 문제 분석N(시간) 동안 1번 또는 2번 나무에서 자두가 떨어진다.자두를 최대한 많이 먹는 것이 목표이다.최대 W번 이동이 가능하며, 이를 고려해 최적의 이동 전략을 세워야 한다.🚨 시행착오초기 접근 방식단순히 1번 나무에서 계속 기다리거나 번갈아 가며 이동하는 방법을 생각했다.그러나 이동 횟수 제한이 있어 무작정 이동하는 것은 비효율적이었다.문제점Brute-force 방식으로 접근하면 경우의 수가 너무 많아진다.DP로 접근해야 한다는 생각은 들었지만, 상태를 어떻게 정의할지가 어려웠다.해결 과정DP 테이블을 정의하고, 시간을 기준으로 자두를 먹을 수 있는 최대 개수를 갱신하는 방식으로 접근했다.이동 횟수에 따라 자두를 먹을 수 있는 최대 개수를 관리하는.. 2025. 2. 26.
[Python][백준 14503] 로봇 청소기 [백준 14503] 로봇 청소기 Python 풀이📌 문제 분석로봇 청소기가 주어진 방에서 청소할 수 있는 칸의 개수를 구하는 문제입니다.방은 2차원 배열로 표현되며, 각 칸은 벽(1) 또는 빈 칸(0)으로 이루어져 있습니다.로봇은 현재 위치에서 청소를 하고, 주변에 청소되지 않은 빈 칸이 있으면 반시계 방향으로 회전하여 이동합니다. 모든 방향이 벽인 경우 후진합니다.🚨 시행착오처음에는 로봇의 이동과 청소 로직을 단순하게 구현했으나, 인덱스 범위 체크와 방향 전환 로직에서 문제가 발생했습니다.로봇이 청소한 칸을 제대로 표시하지 않거나, 후진 로직이 불완전하여 무한 루프에 빠지는 경우가 있었습니다.처음 코드의 문제점인덱스 범위 체크가 부족하여 배열의 경계를 넘어가는 경우가 발생했습니다.방향 전환 로직이 .. 2025. 1. 20.
[Python][백준 1759] 암호 만들기 [백준 1759] 암호 만들기 Python 풀이📌 문제 분석주어진 알파벳으로 구성된 암호를 생성하는 문제입니다.암호는 서로 다른 L개의 알파벳 소문자로 구성되어야 하며, 최소 한 개의 모음(a, e, i, o, u)과 최소 두 개의 자음이 포함되어야 합니다.생성된 암호는 사전식으로 정렬되어 출력되어야 합니다.🚨 시행착오처음에는 모든 가능한 조합을 생성하기 위해 itertools의 permutations를 사용하려고 했습니다.그러나 이 방법은 중복된 조합을 생성하고, 조건을 체크하는 데 비효율적이라는 문제가 있었습니다.처음 코드의 문제점itertools를 사용하여 모든 순열을 생성하면, 조건을 만족하지 않는 조합도 포함되어 결과가 비효율적이었습니다.또한, 모음과 자음의 개수를 체크하는 로직이 복잡해져 .. 2025. 1. 14.
2-10. ZigZag Conversion (LeetCode 6) 문제 풀기 전 생각 : 먼저 변수를 생성합니다 int 타입의 index를 선언합니다. char 타입의 이차원배열을 선언합니다. 변수 row 를 만듭니다. row는 0으로 초기화합니다. 마지막 변수로 level을 선언합니다. level은 column의 역할을 합니다. 와일문으로 매 반복마다 index을 1씩 증가시키고 index가 s의 길이보다 길어지거나 같아지면 반복을 멈춘다. 반복마다 row를 증가시키며 만약 row가 numRows-1 과 같아지면 반복마다 감소시킨다. 그리고 감소하다 0에 도달하면 다시 증가하게 한다. 바로 위의 칸이 비어있다면 올라가고 있는 중이니 level을 증가시키고 만약 차있다면 그대로 둔다. 로 하려고 했지만 완성하고 메모리가 생각보다 많이 들어서 생각을 조금 더 해보니 굳이.. 2021. 7. 9.