📌문제어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다.예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다.n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라. 📌풀이1부터 n-1까지 n을 나눴을 때 0으로 나누어 떨어지는 수를 찾아서 nums 리스트에 추가만약 nums 리스트의 합이 n이라면(완전수) 주어진 형식대로 출력nums 리스트의 각 요소를 문자열로 바꾼 후 +로 연결(join)하여 출력 📌코드while 1: n = int(input()) if n == -1: break nums = [] # 약수 저장할 리스트 for i in range(1, n): if n % i == 0: num..
📌문제어떤 자연수 p와 q가 있을 때, 만일 p를 q로 나누었을 때 나머지가 0이면 q는 p의 약수이다. 6을 예로 들면6 ÷ 1 = 6 … 06 ÷ 2 = 3 … 06 ÷ 3 = 2 … 06 ÷ 4 = 1 … 26 ÷ 5 = 1 … 16 ÷ 6 = 1 … 0그래서 6의 약수는 1, 2, 3, 6, 총 네 개이다.두 개의 자연수 N과 K가 주어졌을 때, N의 약수들 중 K번째로 작은 수를 출력하는 프로그램을 작성하시오. 📌풀이1부터 n까지 반복문을 돌리면서 n을 나누었을 때 나누어 떨어지는 수를 찾음찾은 약수의 개수를 세고 만약 k개를 찾았다면 출력만약 반복문 정상종료 후에도 k번째 약수를 찾지 못했다면(N의 약수의 개수가 K개보다 적어서 K번째 약수가 존재하지 않을 경우) 0 출력 📌코드n, k ..
📌문제4 × 3 = 12이다.이 식을 통해 다음과 같은 사실을 알 수 있다.3은 12의 약수이고, 12는 3의 배수이다.4도 12의 약수이고, 12는 4의 배수이다.두 수가 주어졌을 때, 다음 3가지 중 어떤 관계인지 구하는 프로그램을 작성하시오.첫 번째 숫자가 두 번째 숫자의 약수이다.첫 번째 숫자가 두 번째 숫자의 배수이다.첫 번째 숫자가 두 번째 숫자의 약수와 배수 모두 아니다. 📌풀이입력받은 x와 y가 같다면 더 이상 입력받지 않고 반복문 종료1. y가 x로 나누어떨어진다면=첫번째 숫자가 두번째 숫자의 약수라면 -> factor2. x가 y로 나누어떨어진다면=첫번째 숫자가 두번째 숫자의 배수라면 -> multiple3. 둘다 아니라면 -> neither 📌코드while 1: x, ..
📌문제땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 📌풀이달팽이가 하루에 올라갈 수 있는 거리 A-B하지만 정상에 올라간 후에는 미끄러지지 않는다는 것 주의 만약 A=2, B=1, V=5라면1일차: 2까지 올라갔다 1로 내려오고2일차: 3까지 올라갔다 2로 내려오고3일차: 4까지 올라갔다 3로 내려오고4일차: 5까지 올라갔다 4로 내려옴마지막날 정상에 도달했다가 미끄러진다고 할 때 V-B 위치에 도달하지만 정상에 올라간 후에는 미끄러지지 않는다고 했으..

📌문제위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다. 📌풀이첫번째 레이어: 1두번째 레이어: 2~7(6칸)세번째 레이어: 8~19(12칸)네번째 레이어: 20~37(18칸) ...레이어가 증가할수록 각 레이어의 최댓값이 1+6*n 형태로 증가 입력받은 수가 현재 레이어의 최댓값 보다 크다면 nums에 6*cnt만큼 증가시키고 레이어도 한칸 증가만약 입력..
📌문제상근이는 친구들과 함께 SF영화를 찍으려고 한다. 이 영화는 외계 지형이 필요하다. 실제로 우주선을 타고 외계 행성에 가서 촬영을 할 수 없기 때문에, 컴퓨터 그래픽으로 CG처리를 하려고 한다.외계 지형은 중앙 이동 알고리즘을 이용해서 만들려고 한다.알고리즘을 시작하면서 상근이는 정사각형을 이루는 점 4개를 고른다. 그 후에는 다음과 같은 과정을 거쳐서 지형을 만든다.정사각형의 각 변의 중앙에 점을 하나 추가한다.정사각형의 중심에 점을 하나 추가한다.초기 상태에서 위와 같은 과정을 한 번 거치면 총 4개의 정사각형이 새로 생긴다. 이와 같은 과정을 상근이가 만족할 때 까지 계속한다.상근이는 어떤 점은 한 개 보다 많은 정사각형에 포함될 수 있다는 사실을 알았다. 메모리 소모량을 줄이기 위해서 중복..
📌문제B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35 📌풀이1. reversed() 함수를 사용해서 입력받은 문자열 n을 뒤집음(진법 계산 시 자릿수를 편리하게 처리하기 위해서)2. for문에서 숫자의 자릿수를 역순으로 탐색3. nums에서 해당하는 문자를 찾아 인덱스를 가져옴4. 진법 계산을 위해 b의 i제곱 수행 예시) 36진법 ZZZZZ를 10진수로 표현한다면35(Z)*36⁴ + 35*36³ + 35*36² + 35*36¹ + 35*36⁰ 📌코드n, b = input..

📌문제가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다. 📌풀이1. 크기가 100, 100인 2차원 배열 생성 후 0으로 초기화2. 색종이의 시작 좌표를 입력받은 후 가로 세로 +10 범위까지 2차원 배열의 값을 1로 설정 (단, 도화지 크기인 100, 100을 넘어간다면 break) (만약 여러장의 색종이가..
📌문제아직 글을 모르는 영석이가 벽에 걸린 칠판에 자석이 붙어있는 글자들을 붙이는 장난감을 가지고 놀고 있다. 이 장난감에 있는 글자들은 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’이다. 영석이는 칠판에 글자들을 수평으로 일렬로 붙여서 단어를 만든다. 다시 그 아래쪽에 글자들을 붙여서 또 다른 단어를 만든다. 이런 식으로 다섯 개의 단어를 만든다. 아래 그림 1은 영석이가 칠판에 붙여 만든 단어들의 예이다. A A B C D Da f z z 0 9 1 2 1a 8 E W g 6P 5 h 3 k x한 줄의 단어는 글자들을 빈칸 없이 연속으로 나열해서 최대 15개의 글자들로 이루어진다. 또한 만들어진 다섯 개의 단어들의 글자 개수는 서로 다를 수 있다. 심심해진 ..
📌문제N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오. 📌풀이a,b라는 일차원 배열을 미리 생성한줄씩 입력 받을 때마다 새로운 배열을 생성한 후 기존 일차원 배열에 append하여 2차원 배열 생성두번 반복하여 2차원 배열 a,b가 만들어지면 두 배열의 합을 구함 📌코드n, m = map(int, input().split())a, b = [], []for i in range(n): row = list(map(int, input().split())) a.append(row)for i in range(n): row = list(map(int, input().split())) b.append(row)for i in range(n): for ..