본문 바로가기

단편글

(12)
프로그래머스 연습 2주 후... 프로그래머스에서 코딩 연습을 한지 2주가 지났다. 이제 1단계는 넘어섰고, 2단계를 한 5문제 정도 풀었다. 2단계를 오니 슬슬 시간이 걸리기 시작한다. 1단계는 대체로 vector나 배열을 잘 사용하면 풀 수 있는 문제였다면 2단계부터는 슬슬 BFS도 나오고, 큐와 스택을 이용한 설계도 좀 더 치밀하게 해야 한다. pair 도 사용 빈도가 늘어나고 있다. 풀면서 느끼는 점은 지금까지 알고리즘 공부를 게을리 했다는 것이다. 그럼에도 잘도 회사에서 프로젝트 요구사항을 만들었네. 문제가 안풀린다고 조급해하지 말고 최대한 생각하면서 스스로 풀어보려고 한다.
pair 와 sort 코딩 문제를 풀다가 나온 문제 중 하나를 어떻게 풀까 생각하다가 pair를 쓰게되었다. 문제가 게임에서 스테이지 별로 나오는 값을 정렬해서 출력해야하는 것이였는데, 값만 출력하면 이게 어떤 스테이지에서 나온 값인지 알 수가 없다. 그래서 pair를 이용하여 스테이지 번호와 값을 맵핑하여 저장하였다. pair 이런 식으로 앞에는 스테이지 번호, 뒤에는 값을 넣었다. vector v; 이것을 vector에 넣고, sort 함수를 이용하여 값에 따차 정렬한다. sort(v.begin(), v.end(), sortbysecond); 이때, 값을 보고 정렬하기 위하여 sortbysecond 라는 함수를 선언하였다. bool sortBySecond(pair a, pair b) { if(a.second > b.sec..
vector 중복 제거 검색하면 다 나오는 것이지만, 나중에 보기위해 블로그에 끄적끄적 코딩 문제를 풀다가 나온 문제 중 하나가 연속해서 같은 숫자가 나오면 제거하는 문제였다. 예를 들면 { 1, 1, 2, 3, 4, 4, 4, 5 } 로 나오면 답은 { 1, 2, 3, 4, 5 } 가 되는 것이다. 처음에는 vector가 나오면 항상 쓰는 방식인 iterator 로 풀었다. for(it = arr.begin(); it != arr.end()-1;) { if(*it == *(it+1)) { it = arr.erase(it); } else { ++it; } } 답은 다 맞는데, 효율성이 안좋다고 나왔다. 그래서 검색해보았다. 대학때 배운걸 생각해보면 분명 vector에서 중복제거하는 함수가 있었다. 역시나 사람들이 잘 정리한 글..
vector 비교할 때 프로그래머스에서 문제를 풀다가 느낀점. vector 나 배열같은 문제에서 2개의 리스트를 주고, 서로 비교하여 한쪽에만 있는 아이템을 리턴하라는 문제가 있었다. 이때, 아이템이 여러개 존재할 수 있다. 처음에는 iterator를 사용하여 for문 돌려서 비교하였다. 중복을 제거하기 위하여 있으면 없앴었다. 근데, 답은 답대로 틀리고, 수행시간도 너무 길었다. O(n2) 정도의 수행시간이 걸렸을것이다. 그래서 힌트를 얻은게 정렬하는 것이였다. vector를 정렬하는 방법은 간단했다. 헤더를 넣고. vector v; sort(v.begin(), v.end()); 이렇게 하면 벡터의 처음과 끝이 정렬되었다. 이렇게 두 벡터를 정렬하고, for문 하나를 돌려서 처음부터 끝까지 1대1로 비교하면 되었다. 안맞는게..