오늘 할일
1. LeetCode
2. 창엔 업무
3. 인공지능 개론 과제
4. 영상처리 Chap7공부
5. 책 챙기기
6. 핸드폰 포맷?
7. 창엔 동료평가 자동화 디버깅
8. 예비군 훈련필증 출력
9. 인공지능 FAQ과제
오늘 한일
1. 창엔 동료평가 자동화 디버깅
print("동료평가 성적 처리중...", end="")
for index, row in summary_excel.iterrows():
student_id = row['학번']
count = 0
sum_grade = 0.0
avg_grade = 0.0
student2_list=[]
for index2, row2 in peer_eval_excel.iterrows():
if row2['피평가자 학번'] == student_id:
count = count + 1
if student_id in error_id:
print(student_id, end=": ")
print(int(row2['총점 / 만점'].split('/')[0]))
sum_grade = sum_grade + int(row2['총점 / 만점'].split('/')[0])
이 과정에서 이미 일부 점수값이 누락되어 출력되었다.
print("5. 동료평가 성적 전처리중...", end="")
peer_eval_excel = pd.read_excel(path5, usecols=[2, 4, 11])
for index, row in peer_eval_excel.iterrows():
student_id1 = row['피평가자 학번']
student_id2 = row['평가자 학번']
group1 = ''
group2 = ''
for index2, row2 in summary_excel.iterrows():
if row2['학번'] == student_id1:
group1 = row2[group_column_name]
elif row2['학번'] == student_id2:
group2 = row2[group_column_name]
#if group1 != group2:
#peer_eval_excel = peer_eval_excel.drop([index])
print("5. 동료평가 성적 전처리중...", end="")
peer_eval_excel = pd.read_excel(path5, usecols=[2, 4, 11])
for index, row in peer_eval_excel.iterrows():
student_id1 = row['피평가자 학번']
student_id2 = row['평가자 학번']
group1 = ''
group2 = ''
for index2, row2 in summary_excel.iterrows():
if row2['학번'] == student_id1:
group1 = row2[group_column_name]
elif row2['학번'] == student_id2:
group2 = row2[group_column_name]
if group1 != group2:
print(student_id1, group1, student_id2, group2)
peer_eval_excel = peer_eval_excel.drop([index])
놀랍게도 피평가자의 조가 실제 조와 다르게 인식되는 경우가 있었다. 코드상에 group1이 잘못 들어간 것이다.
print("5. 동료평가 성적 전처리중...", end="")
peer_eval_excel = pd.read_excel(path5, usecols=[2, 4, 11])
review_list = []
for index, row in peer_eval_excel.iterrows():
student_id1 = row['피평가자 학번']
student_id2 = row['평가자 학번']
group1 = ''
group2 = ''
for index2, row2 in summary_excel.iterrows():
if row2['학번'] == student_id1:
group1 = row2[group_column_name]
elif row2['학번'] == student_id2:
group2 = row2[group_column_name]
if group1 != group2:
review_list.append(student_id1)
peer_eval_excel = peer_eval_excel.drop([index])
# 조 오기입 의심 학생 필터링
review_list = list(set(review_list))
print("종합파일 조 오기입이 의심되어 추가확인이 필요한 학생 수: ", len(review_list))
i = 1
for id in review_list:
print(id, end=", ")
if (i % 5 == 0):
print()
i = i + 1
class Solution {
public boolean canVisitAllRooms(List<List<Integer>> rooms) {
List<Integer> queue=new ArrayList<>();
int[] is_visited=new int[rooms.size()];
for (int key: rooms.get(0))
queue.add(key);
while(!queue.isEmpty()){
int room=queue.get(0);
queue.remove(0);
if(is_visited[room]==1)
continue;
for(int key: rooms.get(room))
queue.add(key);
is_visited[room]=1;
}
if(Arrays.stream(is_visited).sum()==rooms.size()-1)
return true;
else
return false;
}
}
최적화를 위해 다른 사람들의 코드를 참고하여, is_visited가 하나라도 미방문한 방(0)이 있다면 false를 리턴하기에
for(int i=0; i<size; i++)
if(is_visited[i]==0)
return false;
return true;
로 리턴처리를 변경했다.
또 빠른 접근을 위해 queue를 단순 배열로 리팩토링하였다.
class Solution {
public boolean canVisitAllRooms(List<List<Integer>> rooms) {
int size=rooms.size();
int[] queue=new int[1000*3];//키값들을 담을 리스트_중복값을 고려하여 3배 낭낭하게 할당
int queue_tail=0, queue_head=0;
int[] is_visited=new int[size];//방문 여부를 담을 배열
for (int key: rooms.get(0))//첫번째 방에 있는 키들을 추가한다.
queue[queue_tail++]=key;
is_visited[0]=1;
while(queue_tail!=queue_head){//열쇄 큐가 비어있지 않다면
int room=queue[queue_head++];//pop한 뒤에
if(is_visited[room]==1)//방문한 곳이면 pass
continue;
for(int key: rooms.get(room))//해당 방의 모든 키들을 추가한다.
queue[queue_tail++]=key;
is_visited[room]=1;//방문처리를 하고
}
for(int i=0; i<size; i++)
if(is_visited[i]==0)
return false;
return true;
}
}