알고리즘 문제/풀어본 것
-
[프로그래머스] 소수 찾기 python(level 2)알고리즘 문제/풀어본 것 2022. 10. 30. 19:06
https://school.programmers.co.kr/learn/courses/30/lessons/42839 1트 소수 판별시 완전 제곱 수로 인한 범위 체크를 잘 하자. +1해줘야함. 문자열.join()의 인자로 iterable 객체를 주면 된다. from itertools import permutations, combinations combinations(iterable 객체, k개) permutations(iterable 객체, k개) from math import comb, perm comb(n, k) # nCk perm(n, k) # nPk 내 풀이 # 한자리 숫자가 적힌 종이 조각이 흩어져 있다. # 흩어진 종이 조각을 붙여 소수를 몇개 만들 수 있는지 알아보자. # 각 종이 조각에 적힌..
-
[프로그래머스] 숫자 게임 python (level 3)알고리즘 문제/풀어본 것 2022. 10. 30. 17:40
https://school.programmers.co.kr/learn/courses/30/lessons/12987 1트 투 포인터지만 꼭 투포인터 형식으로 구현할 필요는 없다. 너무 형식에 얽매이지는 말자. 코드가 좀 길어진다. 내 풀이 # 2xN명의 사원들은 N명씩 두 팀으로 나눠 숫자게임 # A팀 B팀 # 1. 먼저 모든 사원이 무작위로 자연수를 하나씩 받음 # 2. 각 사원은 딱 한 번씩 경기를 함 # 3. 각 경기당 A팀에서 한 사원이, B팀에서 한 사원이 나와 서로의 수를 공개 # 그때 숫자가 큰 쪽이 승리 -> 승리한 팀이 승점 1점 얻음 # 숫자가 같다면 누구도 승점을 얻지 못한다. # 1 = B[b_idx]: # b_idx += 1 # elif A[a_idx] < B[b_idx]: # a_..
-
[프로그래머스] 짝지어 제거하기 python (level 2)알고리즘 문제/풀어본 것 2022. 10. 30. 16:43
https://school.programmers.co.kr/learn/courses/30/lessons/12973?language=python3 1트 문제 풀기전 설계부터하는 것은 좋았다. 그런데 그대로 코딩을 안했다... 주의하자 풀고 틀린 경우 확인할 것 설계대로 구현했는가? 1이 맞다면 설계가 잘못된 곳이 있는지 확인(코너케이스 확인) 내 풀이 # 알파벳 소문자로 이루어진 문자열을 가지고 시작 # 1. 문자열에서 같은 알파벳이 2개 붙어있는 짝 찾기 # 2. 그 둘을 제거 # 3. 앞뒤로 이어 붙임 # 4. 이 과정을 반복 # 짝지어 제거하기를 성공적으로 수행할 수 있다면 1을 리턴 아니면 0을 리턴 # 1. 글자 확인 # 2. stack 이 비어있으면 1로 돌아감 아니면 stack의 맨 처음것과 ..
-
[프로그래머스] 다음 큰 숫자 python(level 2)알고리즘 문제/풀어본 것 2022. 10. 30. 15:09
https://school.programmers.co.kr/learn/courses/30/lessons/12911?language=python3 1트 count함수를 통해 iterable한 객체에서 어떤 값이 몇개 들어있는지 확인할 수 있다. bin(int형 숫자): int형 숫자가 2진수로 어떤 수인지 str형태로 리턴해준다. 0b~ oct(int형 숫자): int형 숫자가 8진수로 어떤 수인지 str형태로 리턴해준다. 0o~ hex(int형 숫자): int형 숫자가 16진수로 어떤 수인지 str형태로 리턴해준다. 0x~ 내 풀이 def solution(n): answer = n count_one = bin(n)[2:].count("1") while True: answer += 1 candidate =..
-
[프로그래머스] 피보나치 수 python(level 2)알고리즘 문제/풀어본 것 2022. 10. 30. 15:02
https://school.programmers.co.kr/learn/courses/30/lessons/12945?language=python3 1트 메모이제이션, dynamic programming 이전에 했던 작업을 또 하는 경우 시간초과가 날 수 있다. 공간복잡도를 생각해서 저장해놓도록하자. 내 풀이 # 피보나치 수 구현 # 2이상의 n이 입력 # n번째 피보나치 수를 1234567로 나눈 나머지를 리턴 import sys FIBONACCI = dict() FIBONACCI[0] = 0 FIBONACCI[1] = 1 FIBONACCI[2] = 1 FIBONACCI[3] = 2 def get_fibonacci(n): if n in FIBONACCI.keys(): return FIBONACCI[n] e..
-
[프로그래머스] 숫자의 표현 python(level 2)알고리즘 문제/풀어본 것 2022. 10. 30. 14:20
https://school.programmers.co.kr/learn/courses/30/lessons/12924?language=python3 1트 투포인터로 풀었다. 수학공식으로 푸는 것도 있지만, 그것은 문제의 의도와는 다르다고 생각해서 넘어갔다. 사실 잘 이해가 안간다. 나중에 공부해보자... 내 풀이 # 자연수 n을 연속한 자연수들로 표현하는 방법이 여러개 # n이 주어졌을 때 연속된 자연수들로 n을 표현하는 방법의 수를 return # n은 10_000이하의 자연수 def solution(n): answer = 0 left = 1 right = 1 sum_result = 1 while True: while sum_result < n: right += 1 sum_result += right if..
-
[프로그래머스] 이진 변환 반복하기 python(level 2)알고리즘 문제/풀어본 것 2022. 10. 30. 13:41
https://school.programmers.co.kr/learn/courses/30/lessons/70129?language=python3 1트 진법 변환을 위해 bin(), oct(), hex()가 있다. 모두 str형태로 반환한다. 앞에는 0b, 0o, 0x가 붙어서 무슨 진법인지 알려준다. iterable 객체에 count를 사용하면 해당 요소가 몇개 있는지 알 수 있다. 내 풀이 # x의 모든 0을 제거 # x의 길이가 c인 경우, x를 c를 2진법으로 표현한 문자열로 바꾼다. # x = 0111010 -> 1111 -> 100 -> 1 # 110010101001 -> 111111 -> 110 -> 11 -> 10 -> 1 def remove_zero(s): result = "" remove..
-
[프로그래머스] 최솟값 만들기 python(level 2)알고리즘 문제/풀어본 것 2022. 10. 30. 13:27
https://school.programmers.co.kr/learn/courses/30/lessons/12941?language=python3 1트 zip(iterable 객체1, iterable 객체2, iterable 객체3, ...) 제일 길이가 짧은 iterable 객체의 수만큼을 tuple 객체로 묶은 zip 객체를 return한다. 보통 for문에서 많이 쓴다. iterable 객체에 sum을 사용하면 항목들이 +연산이 가능한 경우 해당 항목들에 모두 +연산을 해준다. 내 풀이 # 길이가 같은 두 배열 # 배열은 모두 자연수로 이루어짐 # 각각의 배열에서 하나씩 뽑아서 두 수를 곱함 # 배열의 길이만큼 반복 # 두 수를 곱한 값을 누적해서 더한다. # 최종적으로 누적된 값이 최소가 되도록 만..