전체 글

전체 글

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

    최대공약수 : 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개를 지난다. ..

    [BOJ(백준) 1712] 손익분기점 - 파이썬 풀이, 런타임 에러

    https://www.acmicpc.net/problem/1712 1712번: 손익분기점 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 www.acmicpc.net 문제 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다. 예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다..

    [BOJ(백준) 1316] 그룹 단어 체커 - 파이썬 풀이

    문제 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다. 단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다. 출력 첫째 줄에 그룹 단어의 개수를 출력한다. 이 문제는 정말 많이 틀렸다... ㅠ 반례를 못 찾은 것도 있지..

    [BOJ(백준) 2941] 크로아티아 알파벳 - 파이썬 풀이

    https://www.acmicpc.net/problem/2941 2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net 문제 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇..

    [BOJ(백준) 1065]한수 - 파이썬 풀이

    문제 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다. 출력 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다. 이 문제는 한수의 개념이 생소해서 조금 헤맸다. 그런데 문제의 예제 1에서 110을 입력하면 99가 출력된다는 걸 알 수 있다. 100 ~ 110은 모든 자리가 등차수열을 이루지 않아 한수가 아니므로, 1부터 99는 모두 한수라는 뜻이다. 이것을 파악하고 나니 문제가 쉽게 풀렸다. n = int(input()..

    [BOJ(백준) 5622] 다이얼 - 파이썬의 switch와 딕셔너리

    문제 상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다. 전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다. 숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다. 상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다. 할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시..