개발/알고리즘

개발/알고리즘

    [백준 17425]약수의 합 - 파이썬 풀이

    문제 출처 https://www.acmicpc.net/problem/17425 17425번: 약수의 합 두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더 www.acmicpc.net 약수의 합을 모두 더해서 출력하는 문제로 지난번에 푼 약수의 합2 문제와 매우 유사합니다. 시간제한 1초, 메모리 제한 512MB https://y00n-lee.tistory.com/41 [백준 17427]약수의 합2 - 파이썬 풀이 문제 출처 https://www.acmicpc.net/problem/17427 17427번: 약수의..

    [백준 17427]약수의 합2 - 파이썬 풀이

    문제 출처 https://www.acmicpc.net/problem/17427 17427번: 약수의 합 2 두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더 www.acmicpc.net 1부터 자연수 N까지의 수들의 약수를 모두 더하는 문제이다. 나의 풀이 처음엔 1부터 N까지 약수를 하나씩 구해가면서 더했다. 당연히 시간 초과가 났다. N(1 ≤ N ≤ 1,000,000)이라서 모든 약수를 하나씩 구하면 절대 시간 안에 풀 수 없다. 자연수 N을 K로 나눴을 때 나머지가 0이면 K는 N의 약수이다. 약수는 사..

    [백준 4375]1 - 파이썬 풀이

    문제 출처 https://www.acmicpc.net/problem/4375 4375번: 1 2와 5로 나누어 떨어지지 않는 정수 n(1 ≤ n ≤ 10000)가 주어졌을 때, 1로만 이루어진 n의 배수를 찾는 프로그램을 작성하시오. www.acmicpc.net 정수 n이 주어졌을 때, n의 배수 중에서 1로만 이루어진 숫자를 찾고, 그 길이(자릿수)를 출력해야 합니다. 예시로 n이 3이면 3의 배수 중에서 1로만 이루어진 수는 111입니다. 111의 길이가 3이므로 3을 출력해야 합니다. 자료 구조 ones 타입 : 문자열 저장 데이터 : 문자'1'로만 이루어진 문자열입니다. 초기값으로 n의 자리수 * '1'을 정해주었습니다. num_one 타입 : 정수 저장 데이터 : ones 문자열을 정수로 바꾼 ..

    [프로그래머스 12899]124 나라의 숫자 - 파이썬 풀이

    https://programmers.co.kr/learn/courses/30/lessons/12899 코딩테스트 연습 - 124 나라의 숫자 programmers.co.kr 10진법을 124 나라의 수로 바꾸는 문제입니다. 이 문제에서 124 나라의 수는 오직 1, 2, 4만 존재합니다. 자료구조 십진수로 12까지 나타낸 124나라의 숫자를 담은 리스트를 만들었고 전역 변수로 선언했습니다. 그리고 편의를 위해서 맨 앞에 0 값을 넣었습니다. 나의 풀이 numbers : 124나라의 숫자를 저장한 데이터입니다. 십진수 13은 124 나라의 세 자리 숫자로 표시되기 때문에, 두 자리로 표현할 수 있는 최대인 12까지만 변환해서 담았습니다. 그리고 문제 풀이의 편의성을 위해서 0을 숫자 리스트 맨 앞에 추가했..

    [BOJ 10814] 나이순 정렬 - 파이썬, 람다

    https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 이 문제는 회원들을 나이가 증가하는 오름차순으로 정렬한 뒤, 나이가 같으면 먼저 가입한 순서(이것도 오름차순)으로 정렬한다. 다중 조건으로 정렬하는 문제인데, 익명함수 람다(lambda)를 사용해서 풀었다. users = dict() n = int(input()) for i in range(n): age, name = input().split() users[i] = (int(age), name) sor..

    [알고리즘] 최대공약수, 최소공배수 - 파이썬

    최대공약수 : a와 b의 최대공약수는 (a를 b로 나눈 나머지)와 b의 최대공약수와 같다. 큰 수를 작은 수로 나눈 나머지로 큰 수를 대체한다. 큰 수를 작은 수로 계속 나누어서, 나누어 떨어질 때까지 반복한다. 나누어 떨어질 때(나머지가 0일 때), 나누는 수가 최대공약수이다. def gcd(a,b): if b < a: a,b = b,a while b: n = a % b a, b = b, n return a 최소공배수 = 두 수의 곱 / 최대공약수 def lcm(a,b): return (a*b)//gcd(a,b) https://wikidocs.net/21759 위키독스 온라인 책을 제작 공유하는 플랫폼 서비스 wikidocs.net https://blockdmask.tistory.com/53 [유클리드..

    [알고리즘] 소수 판별하기 - 파이썬

    전역 변수 prime_list를 만들고 소수인 값을 몇 개 넣었다. 만약 prime_list에 있는 값이 들어온다면 소수로 판별하고 True를 반환한다. prime_list에 없는 값이 들어온다면 2부터 n-1까지 나누면서 소수인지 아닌지 판별한다. n>19일 때만 소수 판별을 하는 이유는 prime_list에 2부터 19까지 소수를 넣었기 때문에, 19보다 작은 값이 들어온다면 무조건 소수가 아니게 된다. prime_list = [2, 3, 5, 7, 11, 13, 17, 19] def prime(n): if n in prime_list: return True if n>19: for i in range(2, n): if n % i == 0: return False else: return False pr..

    [자료구조] 스택, 큐 구현 - 파이썬 deque

    스택 구현 stack = [] stack.append(1) stack.append(2) stack.append(3) stack.append(7) stack.pop() stack.append(9) stack.append(5) stack.pop() print(stack) # [1, 2, 3, 9], 최하단(먼저 들어온) 원소부터 출력 print(stack[::-1]) # [9, 3, 2, 1], 최상단(나중에 들어온) 원소부터 출력 파이썬의 스택은 별도의 라이브러리를 사용할 필요가 없다. 기본 리스트에서 append()와 pop() 메서드를 사용하면 스택 자료구조와 동일하게 동작한다. 만약 collections라이브러리 사용을 허용하지 않는 코딩 테스트라면 리스트로 간단하게 스택을 구현할 수 있다. 스택을 ..

    [BOJ(백준) 10250] ACM호텔 - 파이썬 풀이

    https://www.acmicpc.net/problem/10250 10250번: ACM 호텔 프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수 www.acmicpc.net 문제 ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와줄 프로그램을 작성하고자 한다. 즉 설문조사 결과대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다. 문제를 단순화하기 위해서 호텔은 직사각형 모양..

    [BOJ(백준) 2292] 벌집 - 파이썬 풀이

    https://www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net 문제 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다. ..