1부터 차례로 커지면서 led가 현재 상태와 다른 상태라면 그의 배수의 led를 바꿔주는 방법 거의 같네용 ㅎㅎ
저도 원재님과 같이 원래 while로 같아질때까지 루프 돌리는 방법으로 하려고하다 루프를 못벗어나길래,, while 제거하고 for문으로만 구현했는데 그래도 풀리더라구요... 참고하세용!
또 아래 start-arr 의 배수 led 변경해 주는 방법은 저번에 강사님이 스위치 문제 풀었던 방법 응용해서 start_arr[(idx+1)time]= 1-start_arr[(idx+1)time] 이런식으로 간략하게 나타내도 괜찮지 않을까 싶습니당
#혜령 방법
for i in range(N):
if pattern[i] == 1 - LED[i]:
start = i+1
# 몇의 배수인지 찾았으니까 led 변화시키기
count += 1
for j in range(1, N+1):
if j % start == 0:
LED[j-1] = 1 - LED[j-1]
# 원재 방법
while start_arr != light_arr: # 입력받은 전구의 상태와 같아질 때까지
for i in range(N):
if start_arr[i] != light_arr[i]: # 입력받은 전구의 상태와 달라지는 첫 번째 인덱스
idx = i
break
times = N // (idx + 1) # 배수의 개수(바꿔야 하는 스위치 개수)
for time in range(1, times + 1): # 인덱스의 배수만큼 반복하며 스위치 상태 변경
if start_arr[((idx + 1) * time) - 1]:
start_arr[((idx + 1) * time) - 1] = 0
else:
start_arr[((idx + 1) * time) - 1] = 1
switch_cnt += 1
역시나 버블정렬 원재님이 sort 나 sorted 함수 자유자재로 사용하는걸 보고 싶군요,, 시간 복잡도도 O(nlogn)이라구욧!
원재님 코드를 볼때마다 생각이 드는건 항상 수학적으로 접근하시는거 같아서 신기합니다. 이것이 통계학과 짬바?
while 문 돌려서 손님이 오는 시간마다 붕어빵 수 생각해 주는 방법 괜찮은 것 같네요,, 저는 while 혐오병이라 ㅠㅜ 배우고 갑니다!
저는 시간마다 생성하는 붕어빵의 개수를 리스트로 다 만들고 시작하는 방법을 사용했는데 나중에 참고 해주세용 ㅎㅎ
customer_lst = list(map(int, input().split())) # 사람 방문 시간 리스트
customer_lst.sort() # 방문사람들 중에 가장 늦은 사람 뽑아내려고 sort
# 사람들 중에서 가장 방문 시간 늦은 사람으로 붕어빵 수 만들기
# 시간을 인덱스로 고려하기
max_c = customer_lst[-1]
boongs = [0] * (max_c+1)
for time in range(1, max_c+1):
# M초 마다 K개 만큼 생성 쭉 이어져 가야해서 몫으로 생각해주기
# ex/ 2초에 2개 만들면 0 0 2 2 4 4 ... 이런식으로 만들어줌
boongs[time] += K*(time//M)
result = "Possible"
for customer in customer_lst:
# 방문객 오는 시간에 붕어빵 있으면 붕어빵 개수 차감
if boongs[customer] >= 1:
for boong in range(customer, max_c+1):
boongs[boong] -= 1
# 방문객 오는 시간에 붕어빵이 없으면
else:
result = "Impossible"
break
3499 퍼펙트셔플
역시 while 덕후 원재님
저는 그냥 range로 리스트 만들어서 돌려줬는데 이 문제에서는 그냥 while문 활용해서 하는게 더 깔끔하고 좋은 것 같네요ㅎㅎㅎ
잘 보고 갑니당
4408 자기방으로 돌아가기
빈 복도의 배열의 인덱스를 활용하는 방법 좋습니다. 제가 참고했던 코드에도 그렇게 접근했더라구요.
뭐 건드릴게 없습니다. 이 문제는 원재님 방법으로 생각해서 풀면 되는 문제 같아요!
D4 문제,,, 고생하셨습니다,, ㅠㅠㅠ!
9489 고대유적
델타로 푸셨군요! 전 전치행렬만들고 난리났었,,,
1 길이 구하는 문제 풀때 오셀로? 문제처럼 원재님이 푸신 방법처럼 while로 1있을 때 계속 반복하는 접근 너무 좋은 것 같습니다. 바로 활용하셨네요,, 짱짱
저도 저 방법으로 다시 풀어봐야겠습니다!
<총평>
전체적으로 원재님의 성장이 돋보였던 코드 리뷰인 것 같습니다. 이젠 더티원재가 아닐지도? 너무 클린해서 할말이 없네용 ㅎㅎ
문제 배정 담당자가 IM시험에 눈이 멀어서 이번 알고리즘 과제 머리아픈 문제들로 그득했는데 다 잘 풀어주셔서 감사하네용,, 너무너무 고생 많으셨습니다!!!
while을 쓰지 않고 for로만 푼 코드를 보니 오히려 while을 쓰면서 코드가 더 길어지고 저 문제에서는 while이 불필요해 보이네요... 역시 goat혜령...
start_arr[(idx+1)time]= 1-start_arr[(idx+1)time] : 이거 장난아니네요;; 사실 제가 그 날 2시간 동안 문제 풀다가 지쳐서 강사님 설명을 제대로 못 들었습니다ㅎㅎㅎ
10580 전봇대
갓나영의 일침 한 방에 바로 pass 받았습니다... 저는 버블정렬 밖에 쓸 수 없는 사람이 된 것 같네요. 알고리즘 시작할 때 sort를 안 쓰려고 하다가 이제는 못 쓰는 사람이 됐습니다ㅋㅋㅋ 앞으로는 sort를 의도적으로 사용하는 연습을 해야겠네요... 파이썬의 장점을 누려야죠!ㅎㅎ
1860 붕어빵
빈 배열을 만들어 만들어진 붕어빵 개수를 저장하는 방법도 좋네요!
그리고 제가 접근하는 방법이 수학적인 방법인가요...? 저는 별 생각없이 한 거였는데ㅎㅎㅎ 하지만 전 알고 있습니다. 통계학과 짬바 필요 없이 결국은 이혜령이라는거ㅋㅋㅋ
느낀 점
따끔한 코드 리뷰 걱정하고 있었는데 예상 외의 친절한 코드 리뷰 감사합니다ㅎㅎ
그리고 제가 while을 선호하는 줄 몰랐는데 오늘 처음 알았습니다ㅋㅋㅋ 저는 문제의 조건을 보고 생각하다 보니 어떤 조건이 되면 그만해야겠다는 생각의 연장선으로 while을 사용해왔습니다. 앞으로 문제 풀 때 고민을 좀 더 길게 해보고 그 문제에 더 나은 방법을 쓸 수 있도록 노력해야겠습니다!
저는 항상 스터디 과제 문제 선정이 좋다고 생각합니다. 물론 이번에 문제 풀 때는 과제가 좀 어려운 것 같다는 생각이 종종 들었지만, 그 덕분에 우리 스터디원 전원이 IM 통과한 것 아니겠습니까? 제 알고리즘 실력 향상에 큰 도움을 주고 있다고 생각합니다ㅎㅎㅎ
5주차 코드리뷰
IM test
10580 전봇대
12712 파리퇴치3
1860 붕어빵
3499 퍼펙트셔플
4408 자기방으로 돌아가기
9489 고대유적
<총평>