[TIL/크래프톤 정글] DAY 53

배재준·2025년 5월 1일

크래프톤 정글 - TIL

목록 보기
46/93
post-thumbnail

2025.05.01

TIL(TODAY I LEARN)


  • 오늘한 내용 : 파이썬을 잊지 않기 위한 백준 풀이 2문제

  • WEEK08: BSD소켓, IP, TCP, HTTP, file descriptor, DNS


6503 - 망가진 키보드 - 25/04/30

문제 링크 - 이동

내 코드

 import sys
 from collections import defaultdict
 input = sys.stdin.readline
 
 while (True):   
     m = int(input().strip())
     if m == 0:
         break
     sen = input().strip()
     
     max_len = 0
     length =len(sen)
     
     # O(N^2) or set(list) n 시간이라 O(N^3) 일수도? 시간초과
     # for i in range(length-m+1):
     #     for j in range(m,length):
     #         if len(set(sen[i:j])) <= m:
     #             max_len = max(max_len,j-i-1)
     #         else:
     #             break
     
     freq = defaultdict(int)
     unique = 0
     end = 0
     start = 0
     
     for end in range(length):
         if freq[sen[end]] == 0:
             unique += 1
         freq[sen[end]] += 1
 
         while unique > m:
             freq[sen[start]] -= 1
             if freq[sen[start]] == 0:
                 unique -= 1
             start += 1 
 
         cur_len = end - start + 1
         max_len = max(max_len,cur_len)
     
     print(max_len)    
  • 슬라이딩 윈도우 기법을 사용해 문제를 풀어야했다.
  • 딕셔너리 보다 defaultdict를 이용하면 더 편하게 문제를 풀 수 있었다.

17427 - 약수의 합 2 - 25/05/01

문제 링크 - 이동

내 코드

 import sys
 
 input = sys.stdin.readline
 
 n = int(input().strip())
 
 # 2중 for문 -> 시간초과
 # #약수의 합 배열 저장해두기
 # fx = [0 for _ in range(1000001)]
 # fx[1] = 1
 # for i in range(2,n+1):
 #     for j in range(1,int(i**(1/2))+1):
 #         if i % j == 0:
 #             fx[i] += j
 #             if j**2 != i:
 #                 fx[i] += i//j
 # print(sum(fx[:n+1]))
 
 result = 0
 for i in range(1,n+1):
     result += (n // i) * i
 
 print(result)
  • 이런 수학적 관계 생각하는게 어렵더라. 규칙만 찾으면 간단한 문제였다.

  • 무작정 완전 탐색으로 풀면 시간 초과가 나버리는 문제들이었다.

0개의 댓글