본문 바로가기

파이썬16

[BOJ] 11399. ATM (Python3) www.acmicpc.net/problem/11399 (level: Silver III) 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 자신감을 얻고, 다른 그리디 문제도 한 번 풀어보기 위해 목록을 좀 훑어보다가 비슷한 레벨의 문제에 한 번 도전해보았다. 이 문제는 어떻게 보면 운영체제에서 배우는 스케줄링과도 유사한 느낌이었다.🤔 아무튼 요지는 사람이 N명 있고, 각각 인출하는 데 걸리는 시간이 주어지는데 (이것도 당연히 N개) 이때 시간이 가장 적게 걸리는 경우, 그 시간이 얼마나 되는지 구해봐라- 뭐 이런 문제였다. 핵심은 1. 입력.. 2021. 4. 23.
[BOJ] 11047. 동전 0 (Python3) www.acmicpc.net/problem/11047 (level: Silver II) 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 최근 그리디를 공부하고 있는데, 짝꿍이 가장 기본이 되는 문제를 보내줘서 풀어보았다. 내가 보고 있는 책에도 이 문제처럼 거스름돈 관련한 문제가 예제로 나와있었는데, 이런 거스름돈 문제가 꼭 그리디라는 것은 아니고 큰 단위가 항상 작은 단위의 배수일 때, 즉, 작은 단위의 동전들을 조합해 다른 해가 나올 수 없을 .. 2021. 4. 23.
[BOJ] 11721. 열 개씩 끊어 출력하기 (Python3) www.acmicpc.net/problem/11721 (level: Bronze II) 11721번: 열 개씩 끊어 출력하기 첫째 줄에 단어가 주어진다. 단어는 알파벳 소문자와 대문자로만 이루어져 있으며, 길이는 100을 넘지 않는다. 길이가 0인 단어는 주어지지 않는다. www.acmicpc.net 진짜 오랜만에 알고리즘 문제를 풀어봤다. (서로가 서로에게 희망이 되어주기 위해서^_^) 올해 초에 갤탭을 구입했으므로 앞으로는 갤탭을 잘 활용해볼 예정이다. 간단한 문제지만 이런 문제들부터 논리적으로 생각하는 연습을 하는게 중요하다고 생각해서 제대로 단계를 나눠서 틀을 짜봤다. tmi :) index 쪽에 빨간색으로 덧씌워서 적은 메모는 처음엔 i=1, i=2로 적었다가 문제를 풀고난 후 i=0부터라는 것.. 2021. 4. 20.
[SWEA] 1486. 장훈이의 높은 선반 (Python3) 문제 링크 : swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV2b7Yf6ABcBBASw 나의 논리 문제를 읽어보면 서론이 구구절절인데, 핵심은 점원 N명의 키를 리스트로 받은 후에 그 키들을 조합해서 높이 B 이상이 되는 경우를 찾으면 되는 문제였다. 한 가지 유의할 점은 높이 B 이상인 것이 여러 개일 때는 그 합이 B와 가장 가까운, 즉, 차이가 적은 값을 답으로 한다는 것이다. 예를 들어, 주어진 조건에서 높이 B = 16일 때 점원들의 키를 조합해서 16이 나오면 베스트고, 그 이상이 나오면 B와 가장 가까운 17부터 시작해서 아무튼 가장 가까운 값을 답으로 하면 된다. # date: 2020/10/25 # autho.. 2020. 10. 25.
[Python3 문법] format을 이용해서 소수점 이하 자릿수 표현하기 새벽에 알고리즘 문제 풀어보다가 시간초과 나서 머리 좀 식힐 겸, 파이썬 문법 연습 좀 할 겸 백준에서 안 풀어본 브론즈 문제 중에 하나를 골라서 풀어보았다. 4344. 평균은 넘겠지 (문제 링크: www.acmicpc.net/problem/4344)라는 아주 기초적인 알고리즘 문제였다. 쉬운 문제였지만 파이썬 초보인 나에게 공부할 만한 내용이 있었다. 1. 반올림 2. 소수점 이하 3번째 자리까지 출력하기 1. 반올림 보통 반올림, 올림, 내림의 경우 다른 언어에서도 round(반올림), ceil(올림), floor(내림)를 사용하고, 찾아보니 파이썬에서도 같은 방법을 사용하면 된다. 다만, round 함수의 경우 내장되어 있지만, ceil과 floor는 import math를 하고 math.ceil과.. 2020. 10. 24.
[Python3 문법] packing(패킹)과 unpacking(언패킹)의 개념과 객체 요소 출력하기 (서론👩🏻) 수업을 듣다가 2차원 배열의 입력을 제대로 받았는지 확인하는 과정에서 이 unpacking이라는 개념을 새롭게 알게 된 김에 공부해봤다. 쌍으로 묶여져 있는 요소들을 따로따로 빼내는 역할을 한다고 생각하면 된다고 하고, 또 자주 쓰이는 개념이라고 해서 알아보려고 한다. 파이썬에서는 packing(패킹)과 unpacking(언패킹)이라는 개념이 존재한다. 말 그대로 packing(패킹)은 포장되어있는 상태고, unpacking(언패킹)은 그 포장을 풀어헤치는 것이라고 생각하면 좀 더 쉬울 것 같다. 인덱스로 접근이 가능한 iterable 자료형(List, Tuple, Dictionary, Set, Map 등)의 요소들을 하나하나씩 unpacking, 즉, 풀어헤치는 것이다. unpacking은.. 2020. 10. 24.
[SWEA] 1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기 (Python3) 문제 링크 : swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13zo1KAAACFAYh&categoryId=AV13zo1KAAACFAYh&categoryType=CODE 나의 논리 점수는 0점부터 100점까지 다 나올 수 있으므로 index의 값이 곧 점수다. 따라서 index 값을 그대로 이용하면 되고, 배열의 size는 101이다. 우선 입력되는 수열(scores 배열)을 쭉 받은 뒤에 각 점수가 몇 번씩 나왔는지(cnt 배열) 세준다. 문제에서 요구하는 값은 cnt 배열의 원소 중 가장 큰 값의 index, 즉, 점수를 출력하는 것. 이 때 유의할 점은 최빈수가 여러 개일 수 있다는 것이다. 만약 이런 경우가 발생하면 .. 2020. 10. 21.
[Python3 문법] list(리스트) 내의 최댓값과 그때의 index(인덱스) 값 구하기 (feat.enumerate) 배열 이름이 list라고 할 때, max(list) 이건 배열 원소 중 최댓값을 구하는 것이다. list.index(max(list)) 그리고 이건 배열 원소 중 최댓값의 index(인덱스)를 구하는 것이다. 다만, 최댓값이 여러 개일 경우에는 가장 앞쪽에 있는, 즉, index의 크기가 가장 작은 값이 나온다. 한 걸음 더 나아가서, list.index를 활용하면 최댓값이 여러 개일 경우 가장 앞쪽에 있는 index만 출력된다고 했다. 그런데 나는 최댓값이 여러 개 존재할 경우 그때의 index들을 다 확인하고 싶다면 어떻게 해야할까? enumerate를 활용하면 된다. m = max(list) [i for i,v in enumerate(list) if v == m] 위 문서에도 설명이 잘 나와있지만,.. 2020. 10. 21.
[SWEA] 9940. 순열1 (Python3) 문제 링크 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXHx23oq0REDFAXR&categoryId=AXHx23oq0REDFAXR&categoryType=CODE 나의 논리 N이 입력되었을 때, 순열이 맞다면 1부터 N까지의 숫자가 한 번씩 다 있어야 한다는 점에 착안해서 테스트 케이스로 입력 받은 숫자들을 sorting 해주고 1부터 N까지의 숫자가 차례대로 있다면 "YES" 아니라면 "NO"를 출력하도록 했다. # date: 2020/10/21 # author: psS2mj # brief: SWEA_9940_순열1 (D3) T = int(input()) for tc in range(1,T+1): an.. 2020. 10. 21.