Algorithm Problem/Python

    [python] 프로그래머스 - 약수의 개수와 덧셈

    🤔문제 해결 1. 나의 풀이 약수의 개수를 구하는 방법: 소인수 분해를 하고, 그 거듭제곱에 +1을 하면 약수가 나온다. 거듭제곱이 2개 이상이라면, 각각의 거듭제곱에 +1을 하고 그 숫자들을 서로 곱해준다. 2. 다른 좋은 풀이 모든 숫자는 약수의 개수가 짝수개이다. 예외로 제곱수는 약수의 개수가 홀수이다. 제곱이기 때문... 💨 디폴트딕트와 리듀스까지 써가면서 열심히 풀었지만, 수학을 잘하면 저렇게 쉽게 풀 수 있다....😜 💻소스 코드 from collections import defaultdict from functools import reduce def solution(left, right): """ 약수의 개수를 구하는 방법: 소인수 분해를 하고, 그 거듭제곱에 +1을 하면 약수가 나온다. 거..

    [python] 프로그래머스 - 음양 더하기

    [python] 프로그래머스 - 음양 더하기

    🤔문제 해결 signs 가 True 이면 더하고, False 이면 빼준다. 💻소스 코드 def solution(absolutes, signs): answer = 0 for i in range(len(absolutes)): if signs[i] is True: answer += int(absolutes[i]) else: answer -= int(absolutes[i]) return answer 📕문제 확인 출처: 프로그래머스 링크: https://programmers.co.kr/learn/courses/30/lessons/76501?language=python3 코딩테스트 연습 - 음양 더하기 어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차..

    [python] 프로그래머스 - 로또의 최고 순위와 최저 순위

    [python] 프로그래머스 - 로또의 최고 순위와 최저 순위

    🤔문제 해결 맞은 개수와 0(조커)를 카운트한다. 최대 = 맞은 개수 + 조커 최소 = 맞은 개수 개수에 따라 등수를 부여한다. ( 0이 아니면 7 - (맞은개수) 해주면 등수 ) 💻소스 코드 def solution(lottos, win_nums): answer = [] right = 0 # 보이는것 중 맞은 것 zero_cnt = 0 # 0은 조커 for lotto in lottos: if lotto == 0: zero_cnt += 1 continue if lotto in win_nums: right += 1 min_rank = right max_rank = right + zero_cnt if max_rank > 0: answer.append(7-max_rank) else: answer.append(6..

    [python] SWEA - 3131. 100만 이하의 모든 소수

    [python] SWEA - 3131. 100만 이하의 모든 소수

    🤔문제 해결 D3 | 소수(에라토스테네스의 체) 💨 주어진 범위만큼의 길이를 가진 모든 원소가 1로 된 리스트를 만든다. ( 이 문제에서 범위는 10**6 ) 💨 리스트의 0번째와 1번째는 미리 0으로 만들어둔다. ( 소수가 아니므로 ) 💨 2부터 끝까지 반복문을 실행하면서 💨 해당 인덱스의 값이 0이 아니라면 💨 해당 인덱스를 제외한 배수의 인덱스의 값을 모두 0으로 바꿔준다. ( 소수가 아니므로 ) 💨💨 EX) 2번째 값이 1이면 4, 6, 8 ... 은 모두 0으로 바꿔준다. 💨 원소의 값이 1인 녀석들은 모두 소수이다. 💻소스 코드 N = 10 ** 6 + 1 eratos = [1] * N eratos[0], eratos[1] = 0, 0 for i in range(2, N): if eratos[..

    [python] SWEA - 3750. Digit sum

    [python] SWEA - 3750. Digit sum

    🤔문제 해결 D3 | 문자열 💨 결과가 한자리 숫자가 될 때까지 각 자리의 숫자를 더해준다. 💨 SWEA 는 모든 입력을 받고 계산하고 모든 출력을 하는게 더 빠르다. 💨 알고리즘의 성능 차이라기 보다 테스트하는 시간의 초과인듯 하다. 💻소스 코드 # 인풋값 전부 받기 T = int(input()) numbers = [input() for _ in range(T)] # 계산하기 results = [] for tc in range(T): number = numbers[tc] answer = 0 while True: sum_num = 0 for n in number: sum_num += int(n) if sum_num > 9: # 결과값이 두자리 수 이면 다시 분해해서 더하기 number = str(sum_..

    [python] SWEA - 3408. 세가지 합 구하기

    [python] SWEA - 3408. 세가지 합 구하기

    🤔문제 해결 D3 | 수학 💨 1부터 N 까지 숫자의 합: N * (N + 1) / 2 💨 1부터 N 개의 홀수의 합: N ** 2 💨 1부터 N 개의 짝수의 합: N * (N + 1) 💻소스 코드 # 인풋 T = int(input()) Ns = [int(input()) for _ in range(T)] # 풀이 results = [] for tc in range(T): n = Ns[tc] result = [] # 전체: n(n+1)//2 result.append(n*(n+1)//2) # 홀수: n**2 result.append(n**2) # 짝수: n(n+1) result.append(n*(n+1)) results.append(result) # 결과 for tc in range(T): print(f'#..