728x90

 

- 주제 : 그리디

- 링크 : https://leetcode.com/problems/longest-palindrome/

from collections import Counter

class Solution:
    def longestPalindrome(self, s: str) -> int: 
        counts = Counter(s)
        length = 0
        odd_found = False
    
        for count in counts.values():
            if count % 2 == 0:
                length += count
            else:
                length += count - 1
                odd_found = True

        if odd_found:
            length += 1
    
        return length

 

알고리즘 강의를 들어야할까....
일단 문제인거.
그리디, 그래프, dfs, bfs, 스택, 큐, 완전탐색
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
다문제다
728x90
728x90

- 주제 : 완전탐색

- 링크 : https://www.acmicpc.net/problem/9094

def count_valid_pairs(n, m):
    count = 0
    
    for a in range(1, n):
        for b in range(a + 1, n):
            if (a * a + b * b + m) % (a * b) == 0:
                count += 1
    return count

t = int(input())

for _ in range(t):
    n, m = map(int, input().split())
    print(count_valid_pairs(n, m))
당신은 브루트포스에 대해서 아시나요.
브루트는 무식한
포스는 힘을 나타냅니다.

무식한 힘을 갖는 알고리즘으로 완전탐색 알고리즘의 한 종류로 완전탐색을 통해 답을 도출하는 알고리즘이다.
대부분 반복문이랑 조건문을 이용하여 답을 도출함.

모든 경우의 수를 탐색하기때문에 100퍼의 정확성을 보장하지만
그의 단점으로 높은 시간 복잡도를 갖고있다.

브루트 포스랑 완전탐색이랑은 비슷하지만 작은 차이가 있는데
완전탐색은 탐색하는거에 초점을 준다면,
브루트포스는 결과를 찾는거에 중점을 둔다.

 

728x90
728x90

 

- 링크 : https://www.acmicpc.net/problem/1145

- 주제 : 완전탐색

import math
from itertools import combinations

def lcm(a, b):
    return abs(a * b) // math.gcd(a, b)

def lcm_of_three(a, b, c):
    return lcm(lcm(a, b), c)

numbers = list(map(int, input().split()))

min_lcm = float('inf')

# 5개의 수 중 3개의 수를 선택하는 모든 조합을 구한다.
for comb in combinations(numbers, 3):
    current_lcm = lcm_of_three(*comb)
    if current_lcm < min_lcm:
        min_lcm = current_lcm

print(min_lcm)

 

- 오늘의 후기 

def lcm함수
: 두 수a와b의 최소 공배수를 계산합니다.
: 최소 공배수는 두 수의 곱을 그들의 최대 공약수(GCD)로 나눈 값으로 구할 수 있습니다.

lcm_of_three 함수
:세 수 a, b, c의 최소 공배수를 계산합니다
:먼저 두 수 a와 b의 최소 공배수를 구하고, 그 결과와 c의 최소 공배수를 다시 계산합니다

numbers 리스트
:사용자로부터 5개의 숫자를 입력받아 리스트로 저장합니다

min_lcm 변수
:최소 공배수를 찾기 위해 초기값을 무한대(float('inf'))로 설정합니다
:이렇게 하면 처음 계산된 LCM이 자동으로 최소값이 되도록 할 수 있음

combinations(numbers, 3) 함수는 5개의 숫자 중 3개의 숫자를 선택하는 모든 조합을 생성하는데 각 조합에 대해 lcm_of_three 함수를 사용해 세 숫자의 최소 공배수를 계산한다..
계산된 LCM이 현재까지 찾은 최소 LCM보다 작으면 min_lcm을 업데이트하면됨

==> 결과)
모든 조합을 다 계산한 후 최종적으로 찾은 가장 작은 최소 공배수를 출력


728x90

+ Recent posts