⚙️ Algorithm

    (C++) 프로그래머스 level2 : 후보키

    문제 설명 후보키 프렌즈대학교 컴퓨터공학과 조교인 제이지는 네오 학과장님의 지시로, 학생들의 인적사항을 정리하는 업무를 담당하게 되었다. 그의 학부 시절 프로그래밍 경험을 되살려, 모든 인적사항을 데이터베이스에 넣기로 하였고, 이를 위해 정리를 하던 중에 후보키(Candidate Key)에 대한 고민이 필요하게 되었다. 후보키에 대한 내용이 잘 기억나지 않던 제이지는, 정확한 내용을 파악하기 위해 데이터베이스 관련 서적을 확인하여 아래와 같은 내용을 확인하였다. 관계 데이터베이스에서 릴레이션(Relation)의 튜플(Tuple)을 유일하게 식별할 수 있는 속성(Attribute) 또는 속성의 집합 중, 다음 두 성질을 만족하는 것을 후보 키(Candidate Key)라고 한다. 유일성(uniqueness..

    [Python] 백준 단계별로 풀어보기: 8단계 -2775번

    문제: 평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다. 이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다. 아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다. 첫번째 줄에 테스트 케이스의 수 T가 입력되고, 각각의 케이스마다 첫번째 줄에 정수 k, 두번째 줄에 정수..

    [Python] 백준 단계별로 풀어보기: 8단계 -10250번

    문제: ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다. 문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정하자 (1 ≤ H, W ≤ 99). 그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자(그림 1 참고). 이런 형태의 호텔을 H × W 형태 호텔이라고 부른다. 호텔 정문은 일층 엘리베이터 바로 앞에 있는데, 정문에서 엘리베이터까지의 거리는 무시한다. 또 ..

    [Python] 백준 단계별로 풀어보기: 8단계 -2869번

    문제: 달팽이는 올라가고 싶다 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 첫번째 줄에 세 정수 A,B,V를 공백으로 구분하여 입력하고, 달팽이가 나무 막대를 올라가는데 며칠이 걸리는지 출력하자. 풀이1(시간초과) A, B, V = map(int, input().split()) D = 0 #걸린 일수 H = 0 #달팽이가 올라간 높이 while(True): H += A D += 1 if H >= V: break H -= B print(D) 처음에는 ..

    [Python] 백준 단계별로 풀어보기: 8단계 -1193번

    문제: 무한히 큰 배열에 다음과 같이 분수들이 적혀있다. 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … … 3/1 3/2 3/3 … … … 4/1 4/2 … … … … 5/1 … … … … … … … … … … … 이와 같이 나열된 분수들을 1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자. X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오. 첫번째 줄에 X(1 ≤ X ≤ 10,000,000)를 입력하고 분수를 출력하자. 나는 규칙을 위와 같은 피라미드 형식으로 생각하였다. 첫번째 줄에서는 분모와 분자의 합이 2, 두번째 줄에서는 분자의 합이 3, 세번째 줄에서는 ..

    [Python] 백준 단계별로 풀어보기: 8단계 1712, 2292번

    문제: 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다. 예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다. 노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다. A, B, C가 주어..

    [Python] 백준 단계별로 풀어보기: 7단계 문자열

    알파벳 소문자,대문자,숫자 0-9 중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성해보자. 코드: a = input() print(ord(a)) 입력: A 출력: 65 N개의 숫자가 공백없이 쓰여있을 때, 이 숫자를 모두 합해서 출력하는 프로그램을 작성해보자. 첫번째 줄에 숫자의 개수 N(1B: print(A) else: print(B) 입력: 734 893 출력: 437 상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다. 전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다. 숫자 1..

    [Python] 백준 단계별로 풀어보기: 6단계 함수

    정수 n개가 주어졌을 때, n개의 합을 구하는 함수를 작성해보자. 코드: def sum(list): return sum(list) 양의 정수 n에 대하여 d(n)을 n과 n의 각 자리수를 더하는 함수이다. 예를 들어, d(75) = 75+7+5 = 87이다. n을 d(n)의 생성자라고 한다. 예를 들어, 101은 생성자가 2개(91과 100)있다. 생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프넘버는 총 13개가 있다. 1,3,5,7,9,20,31,42,53,64,75,86,97 10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성해보자. 입력은 없다. 코드: def d(n): //셀프넘버를 구하는 함수 self_num = n for i in list(str(n..

    [Python] 백준 단계별로 풀어보기: 5단계 1차원 배열

    N개의 정수를 입력했을 때 , 최솟값과 최댓값을 구하는 프로그램을 작성해보자. 첫번째 줄에 정수의 개수 N을 입력하고, 두번째 줄에 N개의 정수를 공백으로 구분하여 입력한 뒤, 최솟값과 최댓값을 공백으로 구분해 출력하자. 코드: N = int(input()) d = list(map(int,input().split())) max = min = d[0] for i in range(N): if d[i] > max: max = d[i] if d[i] < min: min = d[i] print(min, max) 입력: 5 20 10 35 30 7 출력: 7 35 9개의 서로 다른 자연수를 입력했을 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성해보자. 예를 들어, 서로 다른 9개..

    [Python] 백준 단계별로 풀어보기: 4단계 while문

    두 정수 A,B를 입력받고 , A+B를 출력하는 프로그램을 작성해보자. 입력은 여려 개의 테스트 케이스로 이루어지고, 각 테스트 케이스는 한 줄로 이루어져있다. 각 줄에 A,B가 입력되고, 입력의 마지막에는 0두개를 입력한다. 각 테스트 케이스마다 A+B를 출력하자. 코드: while True: A,B=map(int,input().split()) if A == 0 and B == 0: break print(A+B) 입력: 1 1 2 3 3 4 9 8 5 2 0 0 출력: 2 5 7 17 7 두 정수 A,B를 입력받은 다음 A+B를 출력하는 프로그램을 작성해보자. 각 테스트 케이스는 한 줄로 이루어져있으며, 각 줄에 A와 B가 주어진다. 각 테스트 케이스마다 A+B를 출력하자. 코드: while True:..

    [Python] 백준 단계별로 풀어보기: 3단계 for문

    정수 N을 입력받은 뒤, 구구단 N을 출력하는 프로그램을 작성해보자. 1보다 크커나 같고 9 보다 작거나 같은 N을 입력하고 N*1부터 N*9까지 출력하자. 코드: N = int(input()) for i in range(1,10): print( N,"*", i, "=", N*i) 입력: 2 출력: 2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18 두 정수 A,B를 입력받고, A+B를 출력하는 프로그램을 작성해보자. 첫번 째줄에 테스트 케이스의 개수 T를 입력하고, 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. 코드: n = int(input()) for ..

    [Python] 백준 단계별로 풀어보기: 2단계 if문

    1단계: 첫째 줄에 정수 A,B를 공백 한 칸으로 구분하여 입력한 뒤, A가 B보다 큰 경우에는 '>'를 출력, A가 B보다 작은 경우에는 '

728x90