본문 바로가기

전체 글165

[백준/Python] 2501번 약수 구하기 문제 ■ 2501번 약수 구하기 문제 ■ 코드 풀이 두 가지 풀이법을 공유드리겠습니다. 처음 제가 푼 코드와 업그레이드한 코드입니다. 먼저 아래는 기본적으로 누구나 생각할 수 있는 코드입니다. 아래 코드는 N이 10,000 이하의 수여서 최대 10,000번의 for문을 실행할 수 있습니다. 제출할 때는 실패할까 봐 조마조마했지만, 다행히 정답처리 된 코드입니다. N, K = map(int, input().split()) num_list = [] for i in range(1,N+1): if N % i == 0: num_list.append(i) if K > len(num_list): print(0) else: print(num_list[K-1]) 그렇지만, 약수의 속성을 잘 안다면 코드를 더 단축할 수 있습니.. 2023. 4. 12.
[백준/Python] 10757번 큰 수 A+B 문제 ■ 10757번 큰 수 A + B 문제 ■ 코드 풀이 이 문제를 봤을 때 '너무 쉬운데?'라는 생각을 했습니다. 알고 보니, 파이썬에서만 쉬운 거였습니다. 다른 언어에서는 큰 수 연산 과정에서 메모리 초과가 발생한다고 합니다. 처음 알았네요. 그래서 파이썬은 아래와 같은 코드면 쉽게 문제를 풀 수 있습니다. A, B = map(int, input().split()) print(A+B) 하지만 이렇게 풀면 공부가 안 되겠죠? 제 나름대로 머리를 굴려서 아래와 같이 코드를 바꿔봤습니다. 어디서 들은 건(?) 있어서 두 개의 큰 수를 string으로 입력받고, 이를 거꾸로 뒤집어서 일의 자리부터 더하는 코드를 만들어봤습니다. 정답은 맞게 나오는데, 제출해 보니 시간 초과가 나오네요. 아마 정말 '엄청나게 큰 .. 2023. 4. 11.
[백준/Python] 2869번 달팽이는 올라가고 싶다 문제 ■ 2869번 달팽이는 올라가고 싶다 문제 ■ 코드 풀이 이 문제의 핵심은 시간제한입니다. 시간제한이 0.25초로 굉장히 짧은 편인데, 올라가야 하는 높이는 최대 천만이고 하루에 올라가는 높이는 최소 1입니다. 시간제한이 없다면 while문을 활용하여 많이들 푸셨을 텐데, 목표 높이가 최대이고 하루 올라가는 높이가 최소 수준이라면 최악의 경우 천만번의 반복문을 실행해야 합니다. 다시 말해 이 문제에서는 반복문을 사용하지 말라고 대놓고 말하고 있는 것입니다. 반복문을 사용하지 않고도 아이디어로 간단히 문제를 풀 수 있습니다. 우선 소요되는 일수를 day라는 변수로 선언합니다. 낮에는 올라가고 밤에는 미끄러지므로, 올라가야 하는 높이 V를 (올라가는 높이 A - 내려가는 높이 B)로 나눠주면 됩니다. 또한,.. 2023. 4. 10.
[백준/Python] 2292번 벌집 문제 ■ 2292번 벌집 문제 ■ 코드 풀이 문제를 보면 숫자 2부터 7까지는 방이 2개입니다. 8부터 19까지는 방이 3개, 20부터 37까지는 방이 4개, 38부터 61까지는 방이 5개입니다. 다시 말해, 방의 개수를 정하는 범위의 끝은 +6→+12→+18→+24→ .. 씩 늘어난다고 볼 수 있습니다. 정확한 수열 용어는 기억이 나지 않지만, 목적은 코드를 푸는 것이므로 아래와 같이 구현할 수 있습니다. N이 1이라면 바로 room의 개수를 출력하면 됩니다. N이 그 이상이라면 범위의 끝자리 숫자와 비교해야 합니다. 끝자리 숫자보다 N이 작거나 같다면, 그 구간이 바로 방의 개수가 될 테니까요. 이런 코드는 직접 손으로 따라 하셔야 이해가 빠릅니다. 7, 15, 20 이렇게 3가지 숫자에 대해 한 번 연습.. 2023. 4. 9.
[백준/Python] 2903번 중앙 이동 알고리즘 문제 ■ 2903번 중앙 이동 알고리즘 문제 ■ 코드 풀이 코드 자체는 심플한데, 아이디어를 떠올리는게 어려웠던 것 같습니다. 문제를 단순히 하면, 정사각형이므로 한 변에 점이 몇 개씩 늘어나는지만 코드로 구현하면 됩니다. 저는 파이썬 string type의 특성을 활용하여 이를 구현했습니다. 초기 점의 상태를 dot이라고 선언하고 값으로 별표 2개, '**' 를 넣어 줍니다. 여기서 dot은 누적되어 관리되어야 합니다. 문제에서 보면 N = 2는 N = 1인 상태에서 점을 추가한 것이니까요. 누적 관리를 위한 변수를 따로 k라고 선언하겠습니다. 마지막으로 점을 추가하는 규칙은 간단합니다. 점과 점 사이에 하나의 점을 찍는 것이므로 len(dot) -1 만큼 찍어주면 됩니다. 그래서 결과적으로 아래와 같이 간.. 2023. 4. 8.
[백준/Python] 2720번 세탁소 사장 동혁 문제 ■ 2720번 세탁소 사장 동혁 문제 ■ 코드 풀이 거스름돈 수를 가장 적게 받는 방법은 단순합니다. 큰 돈부터 먼저 거슬러주면 됩니다. 이를 위해 if문을 반복적으로 활용해줍니다. def change_money(c, value_of_coin): return c//value_of_coin, c%value_of_coin N = int(input()) test_cases = [] for i in range(N): C = int(input()) test_cases.append(C) for test_case in test_cases: change_list = [0, 0, 0, 0] if test_case >= 25: change_list[0], test_case = change_money(test_case, 2.. 2023. 4. 7.