Conversation
| cout << table[i][j].first+1 << ' ' << i << ' '; | ||
| int t = table[i][j].second; | ||
| while(t != j){ | ||
| cout << t << ' '; | ||
| t = table[t][j].second; | ||
| } | ||
| cout << j; |
There was a problem hiding this comment.
p3. 우선 택배 문제를 활용해서 경로 추적해주신 거 아주 좋아요!! 👍
지금처럼 크기를 따로 table에 저장하며 풀어주신 것도 좋지만, 경로를 추적한 결과값을 배열에 담은 후 나중에 배열 사이즈와 원소를 출력해도 괜찮겠네요! 그럼 table에 들어가는 메모리를 줄일 수 있을 거예요.
| if (count[i / 3].first == 0) | ||
| count[i / 3] = {count[i].first + 1, i}; | ||
| else { | ||
| if (count[i / 3].first > count[i].first + 1) | ||
| count[i / 3] = {count[i].first + 1, i}; | ||
| } |
There was a problem hiding this comment.
p2. count[i].first의 값을 문제의 입력범위보다 큰 상수를 선언해서 초기화하면 현재 코드를 하나로 합칠 수 있겠네요!! 나머지 i % 2 와 i - 1에 대해서도요~! 더불어 메인 연산을 하고 있는 부분은 함수화를 하면 더 좋을 것 같아요!
| for (int i = 0; i < ans; i++) | ||
| path[i + 1] = count[path[i]].second; |
| if(graph[u][v] > w){ | ||
| graph[u][v] = w; | ||
| graph[v][u] = w; | ||
| table[u][v] = v; | ||
| table[v][u] = u; | ||
| } |
There was a problem hiding this comment.
p3. 혹시 모를 중복 간선을 항상 걸러주는 것도 좋지만, 문제에서 주어진 정점과 간선의 최대범위를 보고, 정점에 대한 최대 간선을 계산해보면 중복 간선이 들어오는지 안 들어오는지 파악할 수 있어요~! 그래도 코딩테스트에선 시간이 없을 수 있으니 항상 걸러주는 것도 괜찮겠네요!
| vector<vector<int>> board(20, vector<int>(20)); | ||
| for(int i=1; i<20; i++){ |
There was a problem hiding this comment.
p2. 20은 앞으로 계속 사용할 테니, 헷갈리지 않게 상수로 선언하고 사용해주시는 게 좋아요!
| if(color == 1) { | ||
| check = five(1, i, j, board); | ||
| if(check) { | ||
| cout << color << '\n' << i << ' ' << j; | ||
| return 0; | ||
| } | ||
| } | ||
| else if(color == 2){ | ||
| check = five(2, i, j, board); | ||
| if(check){ | ||
| cout << color << '\n' << i << ' ' << j; | ||
| return 0; | ||
| } | ||
| } |
There was a problem hiding this comment.
p2. 이 부분은 color만 다르고 연산은 중복되니, 하나로 합칠 수 있겠네요~!
| for(int k = 1; k < 5; k++){ | ||
| if(j>15 || board[i][j+k] != color){ | ||
| check = false; | ||
| break; | ||
| } | ||
| } | ||
| if(check){ | ||
| if((j==1 || board[i][j-1] != color) && (j==15 || board[i][j+5] != color)) | ||
| return true; | ||
| } | ||
|
|
||
| check = true; | ||
| for (int k = 1; k < 5; k++) { | ||
| if(i>15 || board[i+k][j] != color){ | ||
| check = false; | ||
| break; | ||
| } | ||
| } | ||
| if(check){ | ||
| if((i==1 || board[i-1][j] != color) && (i==15 || board[i+5][j] != color)) | ||
| return true; | ||
| } | ||
|
|
||
| check = true; | ||
| for(int k = 1; k < 5; k++){ | ||
| if(i>15 || j>15 || board[i+k][j+k] != color){ | ||
| check = false; | ||
| break; | ||
| } | ||
| } | ||
| if(check){ | ||
| if((i==1 || j==1 || board[i-1][j-1] != color) && (i==15 || j==15 || board[i+5][j+5] != color)) | ||
| return true; | ||
| } | ||
|
|
||
| check = true; | ||
| for(int k=1; k<5; k++){ | ||
| if(i<5 || j>15 || board[i-k][j+k] != color){ | ||
| check = false; | ||
| break; | ||
| } | ||
| } | ||
| if(check){ | ||
| if((i==1 || j==19 || board[i+1][j-1] != color) && (i==5 || j==15 || board[i-5][j+5] != color)) | ||
| return true; | ||
| } |
There was a problem hiding this comment.
p2. 가능한 방향에 대한 배열을 미리 만든 후, 반복문을 통해 관리하면 현재 연산을 훨씬 짧게 줄일 수 있어요! 방향 배열을 다루는 문제는 지금까지 꽤 해봤어요. 한 번 수정해볼까요!
No description provided.