목록분류 전체보기 (276)
HwangHub
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
https://www.acmicpc.net/problem/17608 17608번: 막대기 아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로 www.acmicpc.net 문제 풀이 막대기를 리스트에 입력받고, 앞에서 뒤로 리스트를 탐색하면서 점점 더 높은 막대만 카운트하면 된다. 반복문으로 풀 수도 있을 것 같은데, 재귀 함수에 익숙해지고자 간단하지만 재귀 로직으로 구현해봤다. 구현 로직 첫 번째 시도 import sys input = sys.stdin.readline def go(arr, idx, cmp): global ans if idx >= len(arr): pr..
https://www.acmicpc.net/problem/3029 3029번: 경고 첫째 줄에 현재 시간이 hh:mm:ss 형식으로 주어진다. (시, 분, 초) hh는 0보다 크거나 같고, 23보다 작거나 같으며, 분과 초는 0보다 크거나 같고, 59보다 작거나 같다. 둘째 줄에는 나트륨을 던질 시간 www.acmicpc.net 문제 해석 시계 문제로, 그냥 단순히 '기다리기 시작한 시간' 과 '폭탄을 던지는 시간'을 시간으로 관리하고 뺄셈만 해주면 되는 문제다. 문제 풀이 첫 번째 시도 h1, m1, s1 = map(int, input().split(":")) h2, m2, s2 = map(int, input().split(":")) start_time = h1 * 3600 + m1 * 60 + s1 ..
https://www.acmicpc.net/problem/12789 12789번: 도키도키 간식드리미 인하대학교 학생회에서는 중간, 기말고사 때마다 시험 공부에 지친 학우들을 위해 간식을 나눠주는 간식 드리미 행사를 실시한다. 승환이는 시험 기간이 될 때마다 간식을 받을 생각에 두근두 www.acmicpc.net 문제 풀이 학생들이 처음 서 있는 줄은 먼저 들어온 사람이 먼저 나가는 FIFO 구조이므로 queue를 이용하면 된다.(편의상 deque를 이용하여 구현하였다.) 그리고 학생들이 순서대로 입장하기 위해 잠시 머무는 줄은 LIFO 구조이므로 stack을 이용하면 된다. 이제 준비는 끝났다. 문제에서 원하는대로, queue에서 또는 stack에서 순서(order)에 맞는 사람이 res 리스트에 입장..
11880번: 개미 승현이는 방학을 맞아 심심하지만, 공부는 하기 싫습니다. 이렇게 방 안에서 하루하루 시간을 낭비하던 중, 승현이는 자신의 직육면체 모양의 지우개에 개미 한 마리가 붙어 있다는 것을 알게 www.acmicpc.net 문제 풀이 육면체를 펼쳐서 피타고라스 정리를 이용하여 대각선의 제곱을 구하는 문제이다. 경우의 수는 3가지가 가능하다. 처음에는 그냥 냅다 모든 경우를 ans1, ans2, ans3 변수를 할당하여, 이 중에서 가장 작은 값을 구하는 문제라고 생각했는데, 이 방식보다 더 효율적으로 풀어낼 수 없을까 고민하다가 순열조합을 적용해보자 생각했다. 로직상 숫자가 변수에 할당되는 순서에 따라 값이 달라지므로 순열이 적합할 것이다. 제출 코드 from itertools import p..
2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 문제 풀이 주어진 배열로부터 조합을 이용하여 7개를 뽑고, 그 합이 100인 경우를 출력하면 되는 문제이다. 첫 번째 시도 from itertools import combinations as cb arr = list() for _ in range(9): arr.append(int(input())) for case in cb(arr, 7): # print(sum(case)) if sum(case) == 100: ans = sorted(case) print('\n'.join..
15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 중복 조합을 이용하여 출력을 하는 문제이다. 앞서 학습한 순열과 조합 문제들과 비슷한 문제라고 생각하면 된다. 정답 코드 from itertools import combinations_with_replacement as cbwr n, m = map(int, input().split()) arr = [i for i in range(1, n+1)] for x in cbwr(arr, m): print(' '.join(map(str, x)))
1718번: 암호 Vigenere cipher이라는 암호화 방법은 암호화하려는 문장 (평문)의 단어와 암호화 키를 숫자로 바꾼 다음, 평문의 단어에 해당하는 숫자에 암호 키에 해당하는 숫자를 더하는 방식이다. 이 방법을 변 www.acmicpc.net 문제 풀이 평문과 암호화 키를 받고, 평문을 iterator로 보면서 문자를 만날 때마다 암호화 키를 이용하여 인코딩하면 되는 문제다. 1. 평문과 암호화 키를 리스트로 입력받는다. 2. 암호화 키는 평문과 달리 계속 반복될 여지가 있으므로 그 인덱스 값을 나타내기 위해 k_idx 변수를 추가하였다. 3. loop를 통해 평문의 각 인덱스의 character를 변수 x에 저장하고, x가 문자이면 암호화를 진행하고 공백이면 패스한다. 이 때, 공백인 경우에도..