📌문제수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다.X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자. 📌풀이좌표 압축은 주어진 좌표를 상대적인 순서로 변환하는 과정즉, 원래 좌표 값 자체가 아닌 해당 좌표가 크기 순으로 몇 번째인지 저장하는 방식 입력 받은 숫자들을 set으로 중복 제거 한 후 sorted로 정렬 원래 숫자가 몇 번째로 작은지 빠르게 찾기 위해 딕셔너리 사용각 숫자가 몇 번째로 작은지(0-based index) 를 저장하는 역할 enumerate()는 리스트, 튜플 등 반..
📌문제온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오. 📌풀이회원들의 나이와 이름을 입력받을 때 입력 순서 i를 추가하여 하나의 튜플로 묶어서 저장sort 함수의 key로 튜플을 설정해서 첫번째 정렬기준을 나이, 두번째 정렬기준을 입력 순서로 설정members를 age, _, name으로 언패킹하여 출력 📌코드n = int(input())members = []for i in range(n): age, name = input().split() members.append((int(age), i, name)) # i를 추가하여 입력 순서 저장# a..
📌문제알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.길이가 짧은 것부터길이가 같으면 사전 순으로단, 중복된 단어는 하나만 남기고 제거해야 한다. 📌풀이set을 사용하여 입력받은 단어들을 저장하면 자동으로 중복이 제거됨 sorted(words, key=lambda x: (len(x), x))sorted() 함수는 튜플을 기준으로 정렬key 인자가 튜플 (a, b)인 경우, 정렬은 튜플의 첫 번째 요소를 기준으로 정렬하고, 첫 번째 요소가 같으면 두 번째 요소를 기준으로 정렬따라서 길이순 정렬, 길이가 같다면 사전순 정렬이 됨 📌코드n = int(input())words = set() # 중복 제거를 위해 set 사용for _ in range..
📌문제2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. 📌풀이입력받은 x, y 좌표를 리스트에 튜플 형식으로 추가 기본적으로 sort() 함수는 튜플을 정렬할 때 첫 번째 요소(인덱스 0)를 기준으로 오름차순 정렬하고, 첫 번째 요소가 같다면 두 번째 요소(인덱스 1)를 기준으로 오름차순 정렬따라서, x 좌표를 기준으로 오름차순 정렬한 후 만약 x 좌표가 같다면, y 좌표를 기준으로 오름차순 정렬을 하게 됨 정렬된 리스트에서 a, b를 언패킹하여 출력 * 언패킹(Unpacking): 튜플, 리스트와 같은 자료형에 저장된 값을 개별 변수로 분해하여 할당하는 과정 📌코드n = int(input..
📌문제N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. 📌풀이메모리 제한이 있기 때문에 sort와 input으로 입력 받기 사용 불가대신 sys.stdin.readline()으로 입력 받기 N개의 수는 10000보다 작거나 같은 자연수라고 했으므로 크기가 10001인 배열을 선언입력받은 숫자를 배열의 인덱스로 보고 해당 배열의 값 증가(즉, 횟수)반복문을 돌려서 배열 값이 0이 아닐 경우에 배열 값(횟수) 만큼 다시 반복문을 돌려 입력받은 숫자(인덱스)를 출력 📌코드import sysn = int(sys.std..
📌문제2022 연세대학교 미래캠퍼스 슬기로운 코딩생활에 N명의 학생들이 응시했다.이들 중 점수가 가장 높은 k명은 상을 받을 것이다. 이 때, 상을 받는 커트라인이 몇 점인지 구하라.커트라인이란 상을 받는 사람들 중 점수가 가장 가장 낮은 사람의 점수를 말한다. 📌풀이점수 리스트를 높은 점수부터 낮은 점수까지 내림차순으로 정렬한 후 k명째(k-1) 사람의 점수를 출력 📌코드n, k = map(int, input().split())scores = list(map(int, input().split()))scores.sort(reverse=True)print(scores[k - 1])
📌문제상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오. 📌풀이4가지 경우 존재1. n이 5로 나누어 떨어질 때2. n이 5와 최소한의 3으로 나누어 떨어질 때3. n이 3으로 나..
📌문제지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다.체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다.보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8×8 크기의 체스판으로 잘라낸 후에 몇 개의 정사각형을 다시 칠해야겠다고 생각했다. 당연히 8*..
📌문제수현이는 4차 산업혁명 시대에 살고 있는 중학생이다. 코로나 19로 인해, 수현이는 버추얼 학교로 버추얼 출석해 버추얼 강의를 듣고 있다. 수현이의 버추얼 선생님은 문자가 2개인 연립방정식을 해결하는 방법에 대해 강의하고, 다음과 같은 문제를 숙제로 냈다.다음 연립방정식에서 x와 y의 값을 계산하시오.ax+by=cdx+ey=f 4차 산업혁명 시대에 숙제나 하고 앉아있는 것보다 버추얼 친구들을 만나러 가는 게 더 가치있는 일이라고 생각했던 수현이는 이런 연립방정식을 풀 시간이 없었다. 다행히도, 버추얼 강의의 숙제 제출은 인터넷 창의 빈 칸에 수들을 입력하는 식이다. 각 칸에는 -999 이상 999 이하의 정수만 입력할 수 있다. 수현이가 버추얼 친구들을 만나러 버추얼 세계로 떠날 수 있게 도와주자..
📌문제어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오. 📌풀이분해합 n이 주어졌을 때 생성자를 구하는 문제분해합 = 생성자 + 각 자리 수의 합 생성자는 입력된 분해합보다 작으므로 1부터 n까지 확인str(i)로 입력된 숫자를 문자열로 바꿈 "256"map(int, str(i))로 문자열 ..