프로그래머스 42587 프린터
def solution(priorities, location):
queue = [(i,p) for i,p in enumerate(priorities)]
answer = 0
while True:
current = queue.pop(0)
if any(current[1]<q[1] for q in queue): # 현재 대기 목록에서 맨 앞의 문서의 중요도가 가장 크지 않을 때
queue.append(current)
else: # 맨 앞의 문서의 중요도가 가장 크거나 이보다 큰 중요도가 없다.
answer += 1
if current[0] == location:
return answer
priorities = [1,1,9,1,1,1]
location = 0
solution(priorities,location)
a = 10
assert a==10, "a is not 10"
위의 경우, 조건(a==10)이 참이므로 스무스하게 코드가 지나간다(진행된다)
a=10
assert a==100, "a is not 100"
위의 경우, 조건(a==100)이 거짓이므로 AssertionError가 "a is not 100" 메세지와 함께 발생한다.
ord(문자)
: 하나의 문자를 인자로 받고 해당 문자에 해당하는 유니코드 정수를 반환한다.
ord('a') == 97
chr(정수)
: 하나의 정수를 인자로 받고 해당 정수에 해당하는 유니코드 문자를 반환
chr(97) == 'a'
인덱스 지정에 유용할수도 있다.
ex)
N = int(input()) # 피연산자 개수 지정
li = list(input()) # 후위 표기식을 터뜨려 리스트화 한 후, map을 활용해 리스트 요소들 문자화
stack = [] # num의 요소들을 집어넣음
nums = [] # 피연산자에 해당하는 값들(알파벳 순서대로)
for i in range(N):
nums.append(int(input())) # 피연산자에 해당하는 값들을 입력해넣음
for i in li:
if i.isalpha(): # isalpha() : 알파벳인지 아닌지 확인하는 함수
index = ord(i) - ord("A") # ord(문자): 해당문자의 유니코드 정수 반환 / i가 A면 index는 0, B 면 index는 1, C면 2......=> index를 통해 A,B,C 순서로 해당 값들을 지정할 수 있음
stack.append(nums[index]) # => index를 통해 A,B,C 순서로 해당 값들을 지정할 수 있음(stack 에 차례대로 넣음)
else:
b = stack.pop() # pop에 인자를 전달해주지 않으면 맨 뒤에 요소를 추출한다. 그래서 a 보다 b 먼저 정의.
a = stack.pop()
# i가 문자가 아닌 연산기호인 경우, 연산기호에 따라 앞에서 뽑아낸 요소들을 계산하여 stack에넣음
if i == "+":
stack.append(a+b)
elif i == "-":
stack.append(a-b)
elif i == "*":
stack.append(a*b)
elif i == "/":
stack.append(a/b)
# 연산된 요소는 다른 요소와 연산됨. 최종적으로 하나의 값만이 남게 됨.
print("%.2f" %stack[0]) # 실수이면서 소숫점 둘째 자리까지 출력해야 하므로 "%.2f"를 사용하였다.
# print(len(stack))