Data Structure 9

(Python) 수강신청

문제한국대학교에서는 매 학기 시작 전 종합정보시스템에서 수강신청을 한다. 매 수강신청마다 아주 많은 학생들이 몰려 서버에 많은 부하가 가기 때문에, 국민대학교에서는 수강신청 부하 관리 시스템을 도입하기로 결정하였다. 새로운 관리 시스템은 다음과 같은 방식으로 동작한다.수강신청 버튼이 활성화 된 후, 수강신청 버튼을 조금이라도 빨리 누른 학생이 대기목록에 먼저 들어간다.이미 대기열에 들어가 있는 상태에서 다시 수강신청 버튼을 누를 경우 대기목록의 맨 뒤로 밀려난다.잠시 후 수강신청 버튼이 비활성화 되면, 대기목록에서 가장 앞에 있는 학생부터 자동으로 수강신청이 완료되며, 수강 가능 인원이 꽉 찰 경우 나머지 대기목록은 무시하고 수강신청을 종료한다.위의 표는 최대 수강 가능 인원이 3명인 알고리즘 수업에 대..

(Python) 캐시

문제 지도개발팀에서 근무하는 제이지는 지도에서 도시 이름을 검색하면 해당 도시와 관련된 맛집 게시물들을 데이터베이스에서 읽어 보여주는 서비스를 개발하고 있다.이 프로그램의 테스팅 업무를 담당하고 있는 어피치는 서비스를 오픈하기 전 각 로직에 대한 성능 측정을 수행하였는데, 제이지가 작성한 부분 중 데이터베이스에서 게시물을 가져오는 부분의 실행시간이 너무 오래 걸린다는 것을 알게 되었다.어피치는 제이지에게 해당 로직을 개선하라고 닦달하기 시작하였고, 제이지는 DB 캐시를 적용하여 성능 개선을 시도하고 있지만 캐시 크기를 얼마로 해야 효율적인지 몰라 난감한 상황이다.어피치에게 시달리는 제이지를 도와, DB 캐시를 적용할 때 캐시 크기에 따른 실행시간 측정 프로그램을 작성하시오.조건캐시 교체 알고리즘은 LRU..

(Python) 화학식량

우리가 널리 사용하는 H2O(물), CH3COOH(아세트산)과 같은 화학식은 알파벳과 숫자, 그리고 괄호로 구성된다. 먼저 알파벳은 원자를 나타내는 것으로 H는 수소(Hydrogen), C는 탄소(Carbon), O는 산소(Oxygen) 원자를 뜻한다. 또한 원자를 나타내는 알파벳 뒤에 따르는 숫자는 그 원자가 몇 개 포함되어 있는지를 뜻한다. 따라서 COOHHH 분자는 CO2H3로 나타낼 수 있다. 이 문제에서, 숫자는 항상 2 이상 9 이하로만 입력으로 주어진다. 따라서 CO23과 같이 숫자가 두자리인 경우는 없다.물의 화학식을 보고 물은 두 개의 수소 원자와 한 개의 산소 원자로 이루어졌음을 알 수 있다. 또한 아세트산의 화학식처럼 한 종류의 알파벳이 화학식에 여러 번 나타날 수도 있다. 실제 화학..

(Python) 달팽이 배열

문제N이 주어질 때 달팽이 배열을 출력하시오.예를 들어 N = 5 가 주어지면 다음과 같이 출력한다. (아래 예시처럼 열을 맞춰서 예쁘게 출력하진 않아도 된다) 1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9 풀이 N = 5arr = [[0] * N for _ in range(N)]num = 0 # 배열에 넣을 숫자y = 0 # 줄 위치x = -1 # 칸 위치size = N # 배열 크기step = 1 # 증가/감소 크기: 1, -1while size > 0: for _ in range(size): # 가로로 이동 x += step num += 1 arr[y][x] = ..

(Python) 더하기 사이클

문제 💡 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오. https:..

(Python) 콜라츠의 추측

입력자연수 N (1 ≤ N ≤ 8000000)이 입력된다.입력은 항상 정확하다. N  출력총 반복한 숫자 C를 출력한다. C   예제 입출력  이름입력출력설명기본 1">686→3→10→5→16→8→4→2→1기본 2">16416 -> 8 -> 4 -> 2 -> 1기본 3">626331-1500번을 넘음(508번)예외 1">1585403499 예외 2">3170807500 예외 3">1056935-1501번경계값 1">10 경계값 2">21 경계값 3">8000000155  ">       def solution(num): for count in range(500): if num == 1: return count if num % 2 == 0: ..

(Python) 별 찍기

문제 N이 주어지면 다음과 같이 별(1)이 저장된 배열을 반환하는 프로그램을 작성하시오N = 5 0123456780| 11| 1112| 111113| 11111114|1111111115| 11111116| 111117| 1118| 1   풀이 N = 5for i in range(1, 2 * N): if i   a=[]N = 5for i in range(1, 2 * N): line = [] if i   N = 5a=[[0]*(2*N-1) for i in range(2*N-1)]for i in range(1, 2 * N): if i  N = 5a=[[0]*(2*N-1) for i in range(2*N-1)]MID = N-1for i in range(N): ..

(Python) 자릿수 분리하기

입력정수 N (0 ≤ N ≤ 100000000)이 입력된다. 0 이상의 정수가 주어졌을 때, 정수를 앞자리부터 차례대로 끊어서 출력하고, 마지막 줄에는 각 자릿수의 합을 출력하라. 예를 들어 1023이 입력된다면, 1, 0, 2, 3, 6을 출력하면 된다.  입력은 항상 정확하다. N 출력 N1N2N3...NlS  예제 입출력 기본 1">1023102366 = 1 + 0 + 2 + 3기본 2">121233 = 1 + 2기본 3">32524300325243001919 = 3 + 2 + 5 + 2 + 4 + 3 + 0 + 0경계값 1">000 경계값 2">1000000001000000001  풀이N = int(input())numbers = str(N) # int형은 자릿수 직접 순회못해서 str로total..