반응형
1.문제
2. 설계
3. 알고리즘
4. 구현
총체적 난국.. 진짜 한동안 안했더니 왜 이렇게 되는 지 이해하는 데에 한참 걸렸다.
그래도 깔끔하게 이해하고 나니 내가 어떤 부분의 코딩을 잘못하고 있는 지 명확하게 이해했다.
통과답
def solution(progresses, speeds):
answer = []
days = 0
count =0
while(len(progresses)):
if(progresses[0]+days*speeds[0]>=100):
progresses.pop(0)
speeds.pop(0)
count+=1
else:
if count>0:
answer.append(count)
count=0
days+=1
answer.append(count)
return answer
import queue
def solution(progresses, speeds):
answer = []
tmp_list = []
q = queue.Queue()
for i in range(len(progresses)):
if((100-progresses[i])%speeds[i]):
tmp_list.append((100-progresses[i])//speeds[i]+1)
else:
tmp_list.append((100-progresses[i])//speeds[i])
print(tmp_list)
cnt=1
p_cnt=0
for i in range(len(progresses)):
print("i: ",i)
for j in range(i+1,len(progresses)):
print("j: ",j)
if(tmp_list[i]>=tmp_list[j]):
cnt+=1
else:
answer.append(cnt)
i=j
cnt=1
break
print("answer: ", answer)
return answer
일단 위의 코드는 괜찮은데 아래는 여러 문제가 있다.
1. i=j 가 반영되지 않는다. 그래서 i를 건너뛰지 않고 모두 보기 때문에 이상하게 쌓이고 있다.
이건 cpp이랑 다른 부분인 것 같고 굉장히 흥미로운 python만의 특징인 것 같다.
어떻게 이럴 수 있는 지 모르겠는데,
cpp에서는 i+=j를 해주면 i가 이렇게 훅 점프를 한다.
#include <bits/stdc++.h>
using namespace std;
int main() {
for(int i=0; i<10; i++){
cout<<"i: "<<i<<'\n';
for (int j=0; j<10; j++){
cout<<"j: "<<j<<'\n';
if(j==3){
i+=j;
break;
}
}
}
return 0;
}
Success #stdin #stdout 0s 5456KB
i: 0
j: 0
j: 1
j: 2
j: 3
i: 4
j: 0
j: 1
j: 2
j: 3
i: 8
j: 0
j: 1
j: 2
j: 3
반면에 python으로 다음과 같은 코드를 짜면 i가 i+=j를 무시하고 계속 1씩 더해나간다.
아마도 for i range(10)을 하면 i가 붙어있는 list를 순서대로 참조하게 하는 것 같다.
주의해서 사용하기
# your code goes here
for i in range(10):
print("i: ", i)
for j in range(10):
print("j: ", j)
if j==3:
i= (i+j)
break
i: 0
j: 0
j: 1
j: 2
j: 3
i: 1
j: 0
j: 1
j: 2
j: 3
i: 2
j: 0
j: 1
j: 2
j: 3
i: 3
j: 0
j: 1
j: 2
j: 3
i: 4
j: 0
j: 1
j: 2
j: 3
i: 5
j: 0
j: 1
j: 2
j: 3
i: 6
j: 0
j: 1
j: 2
j: 3
i: 7
j: 0
j: 1
j: 2
j: 3
i: 8
j: 0
j: 1
j: 2
j: 3
i: 9
j: 0
j: 1
j: 2
j: 3
* 알게된 것
python 올림, 내림 ,반올림
올림
>>> import math #math 모듈을 먼저 import해야 한다.
>>> math.ceil(-3.14) #결과는 -3
>>> math.ceil(3.14) #결과는 4
내림
>>> import math
>>> math.floor(3.14) #결과는 3
>>> math.floor(-3.14) #결과는 -4
int-> 0으로 가는 방향
>>> int(-3.14) #결과는 -3 => 0으로 가는 방향 선택
반올림
파이썬에 내장된 round() 함수를 사용한다.
>>> round(3.1415) #결과는 3
* 알게된 것2
python stack, queue 사용하기
스택
pancakeStack.append('Pancake #1')
pancakeStack.pop()
큐
ticket_queue.append('Customer #3')
ticket_queue.pop(0)
1. 길이 구하기
len(li) #3
2. 아이템 x와 매치되는 요소 개수 카운트하기
li.count('Pancake #1') #1
3. 스택/큐에 아이템 추가하기
li.extend(li2)
4. 스택/큐 뒤집기 (reverse)
li.reverse()
맨 끝의 엘리먼트 n개를 맨 처음으로 옮기기
.rotate(n) : n은 맨 끝 엘리먼트 몇 개를 옮길지 결정
li = deque()
li.rotate(1)# deque(['Pancake #1', 'Pancake #2', 'Pancake #3']) >> deque(['Pancake #3', 'Pancake #1', 'Pancake #2'])
li.rotate(2)# deque(['Pancake #1', 'Pancake #2', 'Pancake #3']) >> deque(['Pancake #2', 'Pancake #3', 'Pancake #1'])
반응형
'PS > 프로그래머스' 카테고리의 다른 글
프로그래머스 문자열압축 python (0) | 2021.06.12 |
---|---|
프로그래머스 타겟넘버 python, BFS로 풀기 (0) | 2021.06.10 |
프로그래머스 x만큼 간격이 있는 n개의 숫자 python3 (0) | 2021.06.01 |
프로그래머스 평균구하기 python (0) | 2021.05.31 |
프로그래머스 다트게임 cpp (0) | 2021.05.28 |
댓글