분류 전체보기 484

[백준 1966] 프린터 큐

문제 프린터는 다음과 같은 조건에 따라 인쇄된다. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를 확인한다. 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 이 문서를 인쇄하지 않고 Queue의 가장 뒤에 재배치 한다. 그렇지 않다면 바로 인쇄를 한다. 프린터의 문서 수가 주어졌을 때 어떤 문서가 몇 번째로 출력되는지 구하라 입력 첫째 줄에 테스트 케이스가 주어진다. 각 테스트 케이스의 첫째 줄에 문서의 수와 확인하고자 하는 문서의 위치를 입력하고 이어서 문서의 중요도를 입력한다. 출력 확인하고자 하는 문서가 몇 번째로 인쇄되는지 출력한다. 접근 문서들의 위치에 따른 중요도를 큐에 담는다. 그리고 중요도가 큰 것과 같으면 pop을 하고 그렇지 않다면 front에 있는 문서를 ..

[백준 2609] 최대공약수와 최소공배수

문제 두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다. 출력 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. 접근 유클리드 호제법을 통해 최대공약수와 최소공배수를 구해보았다. 먼저 최대공약수를 구하기 위해서 두 수 A와 B가 A>B일 때 B가 0이 될 때까지 A%B를 A에 대입한다. 그리고 A와 B의 값을 교환한다. B가 0이 되는 순간의 A값이 최대공약수가 된다. 또한 최소공배수는 A*B를 최대공약수로 나눠주면 된다. 그 이유는 A와 B의 최대공약수는 두 수 사이에 겹치는 공약수 중 ..

[백준 15829] Hashing

www.acmicpc.net/problem/15829 15829번: Hashing APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정 www.acmicpc.net 접근 ord()를 통해 문자를 숫자로 변경 후에 각각 96을 빼주어 a가 1이 되도록 하였다. 구현 N = int(input()) word = input() answer = 0 for idx in range(N): answer += (ord(word[idx])-96) * (31**idx) print(answer%1234567891)

[Level 2] 올바른 괄호

programmers.co.kr/learn/courses/30/lessons/12909 코딩테스트 연습 - 올바른 괄호 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 ()() 또는 (())() 는 올바른 괄호입니다. )()( 또는 (()( 는 올바르지 않은 괄호 programmers.co.kr 문제요약 입력되는 괄호들의 쌍이 맞는지 확인을 한다. 접근 스택을 이용해 여는 괄호가 들어오면 스택에 넣고 닫는 괄호가 들어오면 POP을 한다. 이때 스택이 비어있는데 닫는괄호가 들어오면 False를 반환하고 모든 문자열을 검색했는데 스택이 비어있지 않는다면 False를 반환한다. 구현 def solution(s): answer = True..

[Level 2] 더 맵게

programmers.co.kr/learn/courses/30/lessons/42626 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr 문제요약 모든 음식을 스코빌지수 K이상으로 만들기 위해서 스코빌지수가 제일 낮은 음식과 두 번째로 낮은 음식을 일정한 규칙응로 섞는다. 모든 음식의 스코빌지수가 K이상이기 위해서는 몇 번을 섞어야 하는지 구하라 단 모든 음식을 K이상으로 만들지 못할 때는 -1을 출력한다. 접근 힙으로 분류가 되었기 때문에 Python의 heapq 모듈을 사용해보았다. 힙에 넣게 ..

[Level 2] 가장 큰 수

문제 0 또는 양의 정수가 주어졌을 때 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내자. 입력 0 또는 양의 정수가 담긴 배열 numbers가 입력된다. 출력 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 출력한다. 접근 처음에 numbers에 담긴 숫자들을 문자형으로 바꾸고 리스트에 저장 한다음에 내림차순으로 정렬하여 출려하면 될 줄 알았지만 예외 케이스가 많았다. 먼저 34, 30, 3으로 정렬이 되었고 이대로 출력하면 34303이되어 가장 큰 수인34330이 나오지 않는다. 따라서 현재 문자와 다음 인덱스의 첫 글자가 같을 때 현재 문자의 두 번째 글자가 0이면 스왑을 해주었는데 입력되는 수는 1000이하였기 때문에 한계가 있었다. 이를 해결하는 것이 문자형으로 변경된 리스트..

[Level 2] 구명보트

문제 무인도에 갇힌 사람들을 구명보트로 구출하려고 한다. 구명보트에는 최대 2명씩 밖에 탈 수 없고, 무게제한도 있다. 구명보트를 최대한 적게 사용하여 모든 사람을 구출하라. 입력 사람들의 몸무게를 담은 배열 people과 구명보트의 무게 제한 limit이 입력된다. 사람의 몸무게는 40kg이상 240kg이하 구명보트의 무게제한은 40kg이상 240kg이하 출력 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 출력한다. 접근 최대한 적게 구명보트를 사용하려면 한 번에 많은 사람을 태워야하고 그러기위해서는 몸무게가 작은사람과 몸무게가 큰사람을 비교해보면서 제한 이하라면 이동시켜야한다. 그리고 문제에서 주어진 조건들을 모두 공격적으로 살펴 볼 필요가 있다. 그냥 주어지는 조건은 없다. 여기서 2명..

[백준 11050] 이항 계수1

www.acmicpc.net/problem/11050 11050번: 이항 계수 1 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net 접근 N! / K!(N-K)! 를 그대로 구현을 하였다. 하지만 math에서 factorial이 있다는 것을 알게되었다. 팩토리얼 안쓰고 구현 N, K = map(int, input().split()) D = 1 t = N-K while N > 0: D *= N N -= 1 M = 1 while K > 0: M *= K K -= 1 while t > 0: M *= t t -= 1 print(D//M) 팩토리얼 연산 from math import factorial N, K = map(in..

[백준 2869] 달팽이는 올라가고 싶다

문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) 출력 첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다. 접근 처음에는 while문으로 A만큼 빼고 B를 더하도록 하였지만 시간초과가 발생하였다. 이후 규칙을 찾으려고 하였다. 하루에 A-B만큼 올라가게 되고 V로 나누려고 했지만 밤에 자는 동안 떨어..

[Level 2] 전화번호 목록

programmers.co.kr/learn/courses/30/lessons/42577 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조 programmers.co.kr 접근 in 연산을 통해 파악하려고 했으나 몇몇 케이스에서 실패를 하였다. 정렬을 해야할 필요가 있었고 오름차순으로 정렬을 한다면 정수형으로 봤을 때 맨 앞 글자가 작은 순서대로 앞에온다. 만약 맨 앞 글자가 같다면 그 다음 수를 보기 때문에 in 연산을 사용할 수 있게된다. 1233, 33 이라는 케이스가 있을 때 문자열의 길이를 오름차순으로 정렬한다면 33이 1233안에..

반응형