kigahy / SIMPLER_AlgorithmStudy

My first study group at SSAFY with Python, 2024/07~2024/09 end.
0 stars 2 forks source link

[4week] 혜령 -> 가현 코드리뷰 #22

Open hyerongii opened 3 months ago

hyerongii commented 3 months ago

4주차 코드리뷰

1220_magnetic

elif matrix[i][j] == 2 : # 현재가 2라면 if i >= 0 : # 위쪽이 인덱스 범위 벗어나면. 참고: i - 1 > 0 로 적어서 2시간동안 오류 찾음. 이것저것 시도해보다 얻어걸린건데 왜 된건지 모르겠으니까 코드리뷰 도와주세요 ㅠㅠ i + 1 > 0 도 가능 matrix[i][j] = 0 # 그자리 0으로 만듦 elif matrix[i-1][j] == 0 : # 위쪽이 0이라면 (이동할 수 있다면) matrix[i][j] = 0 # 현재를 0으로 만들고 matrix[i-1][j] = 2 # 위쪽을 2로 만듦 elif matrix[i-1][j] == 1 : # 위쪽이 1이라면 (충돌한다면) count += 1 # 교착상태이므로 카운트 증가 elif matrix[i-1][j] == 2 : matrix[i][j] = 2 matrix[i-1][j] = 2

- 신선한 접근 방식! if 절 여러개로 조건 일일이 생각해주기 힘들었을 것 같다. 너무 정직하게 접근해서 어렵게 푼 느낌! 최근 배운 스택을 사용해서 1을 저장하고 2가 오면 카운트하는 접근으로 다시 풀어보면 좋을 것 같다.
- 질문: 카운트 중복이 되지 않는건가,,? 1일 때 아래가 2이면 카운트 해주고 2일때 1이면 카운트 해주면 뭔가 중복이 될 것 같다! 카운트 하면 그 값은 수정해주는 작업 필요할 것 같다.

## 2805_농작물 수확하기

- 로직은 내가 풀었던 방법과 비슷하지만 가현이 코드가 더 이해하기 쉬운 것 같다. 나는 점화식으로 해결하려고 해서 힘들었는데 이렇게 시작과 끝 인덱스를 늘려주고 줄여주는 방법으로 접근한게 너무 좋은 것 같다.  
```py 
# 내 방법
for i in range(N):  # 0 1 2 3 4
    if i <= center: # 센터까지 늘어남
        sum_v += sum(arr[i][center-i:center+i+1])
    else:
        sum_v += sum(arr[i][i-center:N-(i-center)])

# 가현이 방법
sum = 0 # 합산 변수
for i in range(N) : # 행 탐색
    for j in range(start, end+1) : # 열 탐색
        sum += plants[i][j] # 농작물의 합계를 저장

    if i < middle : # 만약 마름모의 위쪽이라면
        start = start-1 # 시작 범위를 앞으로 당기고
        end = end+1 # 끝나는 범위를 뒤로 늘려감

    elif i >= middle : # 만약 마름모의 아래쪽이라면
        start = start + 1 # 시작 범위를 뒤로 밀고
        end = end-1 # 끝나는 범위를 앞으로 줄임

4466_ 최대 성적표 만들기

5431_민석이의 과제 체크

# 가현이 방법
all_num = [all_stu for all_stu in range(1, all_stu+1)] # 모든 학생의 번호를 1부터 생성
not_num = [] # 안낸 한생 번호를 추가

for i in all_num : # 모든 학생의 번호만큼 반복
    for j in submit_num : # 제출한 학생의 번호만큼 반복
        if i == j : # 만약 제출했다면
            break # 2중 for문 깨트리고 모든 학생의 번호 중 다음 번호 검사
        else : # 2중 for문에서 제출하지 않았다면
            continue # 2중 for문의 다음 숫자 순회
    else: # for문의 break가 걸리지 않으면 실행되며, i가 submit_number에 해당되지 않았을 때
        not_num.append(i) # 쓰고 싶지 않았지만 써버린 append

# 내 방법
student_lst = [i for i in range(1, 1+N)]
no_submit = []

for student in student_lst:
    if student not in submit_lst:
        # 제출한 애가 아니면 리스트 추가
        no_submit.append(student)
kigahy commented 3 months ago

멋진 코드리뷰 감사합니다 ㅎㅎ 2중 for문 대신 not in...! 기억하겠습니다. 함수도 적극 활용해 볼게요.

그리고 2805_농작물 수확하기 sum_v += sum(arr[i][center-i:center+i+1]) arr의 열 값을 정할 때 행의 중심을 정하는 center 변수와 고정 행을 정하는 i 변수를 활용하여 슬라이싱 한 게 인상깊어요. 변수를 잘 활용하는 것 같아 부럽습니다!

강사님께 피드백받은 결과, 1220_magnetic은 배열에서 1과 2가 만나면 바로 count += 1 되는 코드라서 테스트 케이스가 조금만 허술해지면 틀릴 거라고 하셨다는... 스택 다시 활용해 볼게요.

정성스러운 코드 리뷰와 조언 너무 감사합니다 ㅠㅠ 혜령 체고 ♥️