Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 리멤버나우
- 경제 요약
- but how?
- 백준 2193
- 110 옮기기
- 웹 독학
- 프로그래머스 여행경로
- flask
- C++
- 2003 에러
- 2003 error
- 장영준
- 스무고개 Metric
- Convolutional Neural Networks
- 뤼이드
- 이베이 매각
- aws rds
- git password
- git-lfs
- 오픈소스
- multi-task learning
- cs231
- 알고리즘
- 프로그래머스
- 미국 이란 전쟁
- pytorch-tutorial
- 코딩테스트
- 리멤버나우 요약
- flaks
- 딥러닝
Archives
- Today
- Total
Nam's
[프로그래머스 오답노트] 끝말잇기 본문
문제 출처: https://programmers.co.kr/learn/courses/30/lessons/12981#
반례를 기록해두는게 도움이 될 것 같아 글로 작성한다.
문제 설명: N명의 사람이 끝말잇기를 하는데, 처음 잘못 말한 사람이 누구인지 찾는 문제이다.
잘못말하는 경우는 끝음절을 잇지 않았거나, 이미 나온 단어를 말하는 경우 두 가지이다.
처음 짠 코드에 두 가지 오류가 있었다.
1. 나왔던 모든 단어와 비교
이전에 언급된 단어와만 비교해야지, 이후에 나온 단어까지 비교하면, 처음 말한 단어인데도 틀리는 경우가 생긴다.
2. 찾았으면 break
오류를 찾았으면 answer vector에 추가하고 for문을 break 해줘야 하는데, 이중 for loop이 있어서 제대로 break가 안됐다. 그래서 answer vectro의 size를 확인하고 0보다 커졌으면 break하게 수정해줬다.
*효율성을 위해서 나왔던 단어 체크를 위해 hash map을 사용해도 좋았을 것 같다.
코드:
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(int n, vector<string> words) {
vector<int> answer;
for(int i=1; i<words.size(); ++i){
if(words[i][0]!=words[i-1][words[i-1].size()-1]){
answer.push_back(i%n + 1);
answer.push_back(i/n + 1);
break;
}
for(int j=0; j<i; ++j){
if(words[j]==words[i]){
answer.push_back(i%n + 1);
answer.push_back(i/n + 1);
}
}
if(answer.size()>0) break;
}
if(answer.size()==0) return {0, 0};
return answer;
}
'개발 > Algorithm' 카테고리의 다른 글
[프로그래머스] Level3 110 옮기기 - Greedy (0) | 2021.08.08 |
---|---|
C++ Algorithm Study 08/10 - 해시 Hash (0) | 2021.03.04 |
C++ Algorithm Study 07/10 - 이분탐색 Binary Search (0) | 2021.03.04 |
C++ Algorithm Study 06/10 - 깊이/너비 우선 탐색 (DFS/BFS) (0) | 2021.03.04 |
C++ Algorithm Study 05/10 - 힙 Heap (0) | 2021.03.04 |
Comments