우리 팀은 금주에 모여 코딩테스트 문제를 하나 골라 한명이 코드 리뷰를 하였다. 또한 현재 프로젝트에서 맡은 역할에 따라서 각자 task를 진행하였다.
모임 개요
- 장소 : 자율주행스튜디오
- 참석자 : 임현진, 김찬호, 안상호, 심혜린
Code Review
금주 코딩테스트 문제 - 로봇청소기(백준)
https://www.acmicpc.net/problem/14503
#include <iostream>
using namespace std;
int map[50][50];
int visited[50][50];
int N, M;
//위 오 아 왼
int dr[4] = {-1,0,1,0};
int dc[4] = {0,1,0,-1};
void dfs(int r, int c, int d, int sum){ //2번
// 1. 현재 위치를 청소한다.
// 2. 현재 위치에서 현재 방향을 기준으로 왼쪽방향부터 차례대로 탐색을 진행한다.
// a.왼쪽 방향에 아직 청소하지 않은 공간이 존재한다면, 그 방향으로 회전한 다음 한 칸을 전진하고 1번부터 진행한다.
// b.왼쪽 방향에 청소할 공간이 없다면, 그 방향으로 회전하고 2번으로 돌아간다.
// c.네 방향 모두 청소가 이미 되어있거나 벽인 경우에는, 바라보는 방향을 유지한 채로 한 칸 후진을 하고 2번으로 돌아간다.
// d.네 방향 모두 청소가 이미 되어있거나 벽이면서, 뒤쪽 방향이 벽이라 후진도 할 수 없는 경우에는 작동을 멈춘다.
for(int i = 0; i<4; i++){ //왼쪽부터 반시계방향
int nd = (d+3-i)%4;
int nr = r + dr[nd];
int nc = c + dc[nd];
if(nr<0 || nr>=N || nc<0 || nc>=M || map[nr][nc]==1) { //범위 넘어가거나 벽이면 다음 방향
continue;
}
//a. 아직 청소하지 않은 공간이 존재한다면
if(visited[nr][nc] == 0 && map[nr][nc] == 0){
visited[nr][nc] = 1; //현재 위치 청소
dfs(nr, nc, nd, sum+1);
}
}
int backIdx = d+2<4 ? d+2 : d-2;
int backr = r + dr[backIdx];
int backc = c + dc[backIdx];
if(0<=backr && backr<=N && 0<=backc && backc<=M){
if(map[backr][backc]==0){ //뒤쪽 방햑 벽 아니어서 후진할 수 있을 때
dfs(backr, backc, d, sum); //한칸 후진
}
else{ //뒤쪽 방향 벽이라 후진 못할 때
cout << sum <<endl;
exit(0);
}
}
}
int main(){
int r, c, d;
cin >> N >> M;
cin >> r >> c >> d;
for(int i = 0; i<N; i++){
for(int j = 0; j<M; j++){
cin >>map[i][j];
visited[i][j] = 0;
}
}
visited[r][c] = 1;
dfs(r,c,d,1);
return 0;
}
내용 : 어떻게 문제를 풀었는지, 코드리뷰를 하면서 하나하나 풀이법을 설명했다. 코드리뷰를 하면서 서로의 의견을 공유하고 어떻게 로직을 더욱 효율적으로 바꿀수 있을지 고민해 보았다. 이번 기회에 백트래킹에 대해서 심도있게 공부 할 수 있어서 좋았다.
Meeting
- 상호 <->현진
이번 프로젝트에 적용시킬 모델을 탐색하던 중, 상호가 좋은 논문을 찾아서 논문 리뷰 및 모델 소개를 해주었다. One-class Novelty detection 중에서 특이하게 GAN을 사용하여 성능을 끌어올린 OCGAN이라는 모델이다. OCGAN은 간략하게 설명하자면 기존방법에서 GAN을 사용하여 "out-of-class sample은 잘 표현되지 못해야 함"이라는 Novelty detection 필요 조건을 충족시켜주고 latent space 상에서의 문제를 해결해준다는 장점을 가진 모델이다.
https://arxiv.org/abs/1903.08550
2. 현진 <-> 찬호
api를 이용하여 opensea에서 판매되고 있는 NFT 아이템들의 이미지를 어떻게 하면 가져올 수 있을지 의논해보았다. 서로 의논하면서 다양한 방법을 고안했고, 해결방법을 찾을 수 있었다.
개별 학습(탐색) 내용
[상호]
- latent space autoregression for novelty detection 논문 읽기
- OCGAN: One-class Novelty Detection Using GANs with Constrained Latent Representations 논문읽기 논문 리뷰 (with 현진)
- OCGAN 논문 코드 작성중 (pytorch)
- 현재 task에 model compression이 필요한가에 대한 회의 (with 현진)
[현진]
- api를 이용하여 NFT 이미지 crawling code 작성
- NFT 이미지 crawling 자동화에 대한 방법 탐색
- OCGAN: One-class Novelty Detection Using GANs with Constrained Latent Representations 논문읽기 논문 리뷰 (with 상호)
- 현재 task에 model compression이 필요한가에 대한 회의 (with 상호)
[찬호]
- 기능명세서 작성
- api 호출 코드 구현 및 전문가와 미팅
- 이미지 생성 코드 작성 (stable diffusion)
[혜린]
- UI/UX 작성
- 기능명세서 작성