본문 바로가기

분류 전체보기

(63)
BOJ 2981 : 검문 문제 트럭을 타고 이동하던 상근이는 경찰의 검문을 받게 되었다. 경찰은 상근이가 운반하던 화물을 하나하나 모두 확인할 것이기 때문에, 검문하는데 엄청나게 오랜 시간이 걸린다. 상근이는 시간을 때우기 위해서 수학 게임을 하기로 했다. 먼저 근처에 보이는 숫자 N개를 종이에 적는다. 그 다음, 종이에 적은 수를 M으로 나누었을 때, 나머지가 모두 같게 되는 M을 모두 찾으려고 한다. M은 1보다 커야 한다. N개의 수가 주어졌을 때, 가능한 M을 모두 찾는 프로그램을 작성하시오. 풀이 아래 블로그를 참고하였다. https://velog.io/@ledcost/%EB%B0%B1%EC%A4%80-2981-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B2%80%EB%AC%B8-%EA%B3%A8%EB%9..
BOJ 2609 : 최대공약수와 최소공배수 문제 두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오. 풀이 앞의 약수에서 참고한 알고리즘인 '유클리드 호제법'을 조금만 참고하면 된다. 두 수의 최대 공약수는 두 수의 나머지를 계속 나눔으로써, 언젠가 나누어 떨어지는 수를 의미한다. 그리고 최소 공배수는 두 수의 최대 공약수로 구성된 최소의 수 이므로 x(a를 최대공약수로 나눈 수)*y(b를 최대공약수로 나눈 수)*GCD(a,b)로 귀결된다. 이는 두 수(a = x* GCD(a,b), b = y*GCD(a,b))로 구성 되어 있기 때문에 각각의 최소 공배수는 위와 같이 구성된다. 최대공약수(GCD : Greatest Common Divisor) 최소공배수(LCM : Least Common Multiple) impo..
BOJ 1037 : 약수 문제 양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오. 풀이 진짜 간단한 문제다. 하지만 나는 틀렸다. '유클리드 호제법'은 두 수들의 나누기를 통해서 그 나머지로 기존 수로 나누어서 나머지가 0이 될 때의 나머지 수가 최대 공약수인 방법이다. 여기서 모든 약수들 중에서 최소 약수와 최대 약수의 곱으로 기존 수를 구할 수 있다. https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95 유클리드 호제법 - 위키백과, 우리 모두의 백과사전 유클리드 호제법(-互除法, Euclid..
BOJ 10814 : 나이순 정렬 문제 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오. 풀이 직전 문제와 동일하게 Nested List로 처리하면 금방 풀린다. 그러나 시간이 조금 필요했던 부분은 age를 string으로 받아서 ,int로 받았을 때와 결과가 다르게 나온다는 것. 이해하고 처리하니 금방 해결됐다. import sys if __name__ == '__main__': N = int(input()) data_list = {} for _ in range(N): age, name = sys.stdin.readline().split() if int(age) in data_list: da..
BOJ 1181 : 단어 정렬 문제 알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오. 길이가 짧은 것부터 길이가 같으면 사전 순으로 풀이 문제를 보고 딱 든 생각은 'Nested List'응용 문제라고 생각했다. 처음에 시작을 List 내부 List로 구성해서 시간 초과가 발생했었다. 이후 Dictionary 타입을 이용해서 문자를 정렬했는데, 이 역시 풀이에서 2중 For문을 사용하여 시간 초과가 발생했다. 최종적으로 아래 코드와 같이 Key : 문자열 길이 Value : 문자로 구성되는 자료 구조를 택함으로써 시간 내 문제를 풀이하였다. import sys if __name__ == '__main__': N = int(input()) data_list = {} for _ in..
아들아, 돈 공부해야 한다. 읽은 곳 : 밀리의 서재 읽은 기간 : 2022.03 ~ 04 작가 : 정선용(정스토리) 인상 깊은 내용: 부자들은 절세를 통해서 돈을 모으는 방법을 아는 사람들. (96/282) 인생이란 결코 공평하지 않다. 그런 현실에 대해 불평할 생각 말고 받아들여라. 세상은 여러분이 어떻게 생각하든 상관하지 않으며, 여러분이 스스로에게 만족을 느끼기 전에 무엇인가를 성취하여 보여줄 것을 기대한다. 햄버거 가게에서 일하는 것을 수치스럽게 생각하지마라. 우리의 할아버지들은 그 일을 기회라고 생각했다. 만약에 여러분이 인생을 망치면 그것은 부모 탓이 아니라, 여러분 잘못이다. 잘못을 불평하지 말고 그것으로부터 배워라. 인생이 불공평한 것에 빨리 익숙하게 되기를 바란다. 인간을 바꾸는 방법은 세 가지뿐이다. 시간을 달리..
BOJ 1436 : 영화감독 숌 문제 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다. 종말의 숫자란 어떤 수에 6이 적어도 3개이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 숫자는 666이고, 그 다음으로 큰 수는 1666, 2..
BOJ 1018 : 체스판 다시 칠하기[python3] 문제 지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다. 체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다. 보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8×8 크기의 체스판으로 잘라낸 후에 몇 개의 정사각형을 다시 칠해야겠다고 생각했다. 당연히 8..