분류 전체보기
[백준]11047번 동전0 - 그리디
n, k = map(int,input().split()) a = [] cnt = 0 for i in range(n): a.append(int(input())) for i in range(len(a)-1, -1, -1): if k < a[i] : continue cnt = cnt + int(k / a[i]) k = k % a[i] if k == 0: break print(cnt) 코드 설명 먼저 a 리스트에 이용가능한 동전의 가치를 저장해준다. 가장 큰 가치를 가진 동전을 먼저 사용해야 하므로 반복문을 거꾸로 수행한다. 만약 동전의 가치가 K원보다 크다면 continue를 통해 다음 반복을 수행한다. 그렇지 않다면 카운트에 그 몫을 더해준다. k 는 나머지 연산을 통해 숫자를 갱신해준다. k == 0 이 ..
[백준]2839번 설탕 배달 - 그리디
n = int(input()) answer = 0 while True: if n % 5 == 0: answer = answer + n // 5 print(answer) break n -= 3 answer += 1 if n < 0 : print(-1) break 코드 설명 5키로의 봉지로만 나눌 수 있을 경우 그 몫을 answer에 더해준다. 나눌 수 없을 경우 3키로 봉지를 하나씩 선택하며 anwer 를 증가시켜 준다. 만약 n이 음수로 된다면 정확하게 만들지 못하는 것이므로 -1을 출력한다. Point : 5키로 봉지로 나눌 수 있을 경우에는 그 몫을 더하고 그렇지 못할 경우에는 3씩 빼주는 연산을 수행한다. 이 과정을 통해 적은 봉지수를 구할 수 있다. 만약 진행중 n의 값이 음수가 된다면 만들 수 ..
[백준]5430번 AC - 덱
from collections import deque import sys n = int(sys.stdin.readline()) for i in range(n): command = sys.stdin.readline().strip() # 명령어 length = int(sys.stdin.readline()) if length == 0: input() deque_ = deque([]) else: # 대괄호는 빼고 입력 받기 deque_ = deque( sys.stdin.readline()[1:-2].strip().split(',')) #print(deque_) flag = 1 # 뒤집기 체크 flag2 = 1 # 에러 체크 for i in range(len(command)): if command[i] == 'R..
[백준]1021번 회전하는 큐 - 덱
from collections import deque import sys n, m = map(int, sys.stdin.readline().split()) deque = deque([]) for i in range(1, n + 1): deque.append(i) a = list(map(int, sys.stdin.readline().split())) cnt = 0 for i in range(m): # 2번 연산이 유리한 경우, 뽑으려는 값이 덱에서의 인덱스가 더 작을 경우 if deque.index(a[i]) < len(deque) - deque.index(a[i]): while True: if deque[0] == a[i]: deque.popleft() break else: deque.append(deq..
[백준]10866번 덱 - 덱
from collections import deque import sys n = int(sys.stdin.readline()) deque = deque([]) for i in range(n): command = sys.stdin.readline().strip() if command.split()[0] == 'push_front': deque.appendleft(int(command.split()[1])) elif command.split()[0] == 'push_back': deque.append(int(command.split()[1])) elif command == 'pop_front': if len(deque) == 0: print(-1) else: print(deque.popleft()) elif..
[Python]패키지란?
패키지란 무엇인가? Package 는 도트(.)를 사용하여 파이썬 모듈을 계층적(디렉토리 구조)으로 관리할 수 있게 한다. 예를 들어 모듈의 이름이 A.B 라면 A는 패키지 이름, B는 A패키지의 B모듈을 뜻한다. 패키지 예시 example/ __init__.py sound/ __init__.py echo.py wav.py grapchic/ __init__.py screen.py render.py play/ __init__.py run.py test.py 위의 구조에서 example, sound, graphic, play 는 디렉터리 이름이고 .py 의 확장자는 파이썬 모듈이다. example 디렉터리는 이 패키지의 루트 이름을 뜻하고, 하위에 있는 것들은 서브 디렉터리를 뜻한다. 구조화를 하는 이유? ..
[Python]if __name__ == "__main__" 란?
if __name__ == "__main__" 란? __name__ 변수는 파이썬이 내부적으로 사용하는 특별한 변수 이름이다. 만약 example.py 파일을 실행할 경우 example.py 의 __name__ 변수에는 __main__ 값이 저장된다. 하지만 다른 파이썬 모듈에서 import 할 경우에는 모듈의 이름 값인 example 이 저장되게 된다. 사용하는 이유? 현재 스크립트 파일이 프로그램의 시작점이 맞는지 판단하는 작업이다. 즉, 스크립트 파일이 메인 프로그램으로 사용될 경우와 모듈로 사용될 경우를 구분하기 위해서 사용하게 된다. 스크립트 파일로 실행하거나 모듈로 사용하는 코드 def add(a, b): return a + b def mul(a, b): return a * b if __nam..
[Python]모듈이란?
모듈 모듈이란 함수나 변수 또는 클래스를 모아놓은 파일이다. 모듈은 다른 파이썬 프로그램에서 불러와 사용할 수 있게 만든 파이썬 파일이라고도 할 수 있다. 모듈 만들기 # mod1.py def add(a, b): return a + b def sub(a, b): return a - b 위와 같이 간단함 모듈을 생성하였다. 그렇다면 모듈은 어떻게 이용해야 할까? 모듈 불러오기 import mod1 print(mod1.add(3, 4)) print(mod1.sub(3, 2)) import 모듈이름을 통해 모듈을 불러올 수 있다. .py의 확장자는 붙이지 않도록 한다. from mod1 import add add(3, 4) from 모듈이름 import 모듈함수 이런 형식을 이용하면 모듈 이름을 붙이지 않고 ..
[Python]Class 는 왜 필요한가?
클래스의 필요성 예시를 통해 클래스의 필요성에 대해 파악해보려고 한다. 다음과 같은 코드가 있다. result = 0 def add(num): global result result += num return result print(add(3)) print(add(4)) # 결과 3 7 위의 코드는 계산기의 더하기 기능을 구현한 코드이다. 하지만 2대의 계산기가 필요한 경우에는 add 함수 하나만으로는 결과값을 유지할 수 없다. 그렇기 때문에 add1, add2 와 같이 여러 개의 함수가 필요할 것이다. 이렇게 되면 계산기가 3, 5 이런식으로 많이 필요하게 되면 중복되는 코드는 점점 많아지고 지저분해질 것이다. 이런 경우에 클래스의 사용을 통하여 간단하게 해결할 수 있다. class Calculator: ..
[백준]1966번 프린터 큐 - 큐
from collections import deque n = int(input()) for i in range(n): queue = deque([]) num, wh = map(int, input().split()) temp = (list(map(int, input().split()))) for i in range(len(temp)): queue.append(temp[i]) temp[wh] = 'answer' cnt = 0 while True: if queue[0] == max(queue): # 큐의 맨 앞자리가 우선순위가 제일 높은 경우 cnt = cnt + 1 # 카운트 if temp[0] == 'answer': # 지정한 인덱스가 맞을 경우 print(cnt) # 출력 break else: # 우선순..