티스토리 뷰

 

 

코딩테스트 연습 - 표 편집

8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO"

programmers.co.kr

 

 

문제풀이

 

2021 카카오 채용연계형 인턴십 코딩테스트 문제로 나왔다.

코테 때도 시간초과가 나서 해결을 하지 못했는데 다시 풀어도 그렇다,,

 

 

 

2021 카카오 인턴십 for Tech developers 코딩 테스트 해설

2021년 카카오의 여름 인턴십의 첫 번째 관문인 코딩 테스트가 지난 2021년 5월 8일에 4시간에 걸쳐 진행되었습니다. 이번 인턴 코딩 테스트에서는 5문제가 출제되었습니다. 이전과 동일하게 쉬운

tech.kakao.com

 

처음에는 벡터로 풀었는데 정확성 테스트는 다 통과했지만 효율성 테스트는 빵점,,,

카카오 기술블로그의 코딩 테스트 해설을 참고해서 풀어보았다.

아래 코드는 정확성은 모두 통과하고 효율성 테스트는 9, 10번만 통과한 코드다.

내일 다시 도전!!

 

더보기
#include <string>
#include <vector>
#include <list>

using namespace std;

string solution(int n, int k, vector<string> cmd) {
    vector<bool> deleted(n); // true : 삭제된 행
    vector<int> st;
    list<int> table;

    for (int i = 0; i < n; i++) table.push_back(i);

    auto cur = table.begin();
    for (int i = 0; i < k; i++) cur++;

    for (int i = 0; i < cmd.size(); i++) {
        if (cmd[i][0] == 'U') {
            for (int j = 0; j < stoi(cmd[i].substr(2)); j++) {
                cur--;
            }
        }
        else if (cmd[i][0] == 'D') {
            for (int j = 0; j < stoi(cmd[i].substr(2)); j++) {
                cur++;
            }
        }
        else if (cmd[i][0] == 'C') {
            deleted[*cur] = true;
            st.push_back(*cur);

            auto now = cur;

            if (*cur == table.back()) cur--;
            else cur++;
            table.erase(now);
        }
        else if (cmd[i][0] == 'Z') {
            deleted[st.back()] = false;
            table.push_back(st.back());
            table.sort();
            st.pop_back();
        }
    }

    string answer = "";
    for (int i = 0; i < deleted.size(); i++) {
        if (deleted[i]) answer += 'X';
        else answer += 'O';
    }
    return answer;
}

 

 

Z 명령어를 수행할 때 들어갈 자리를 찾는 것에 시간이 많이 걸리는 것 같다.

코드를 고쳤는데도 계속 시간초과 떠서 아래 블로그를 참고해서 풀어봤다.

 

 

[프로그래머스 Lv3] 표 편집(with Swift)

#프로그래머스, #카카오 채용연계형 인턴쉽, #스위프트, #표 편집, #Swift, #swift

velog.io

 

prev, next 배열을 만들어서 링크드 리스트처럼 이전 행과 다음 행 정보를 관리해주었다.

행을 삭제하면 이전 행과 다음 행을 연결해주면 되고 행을 복구하면 해당 행을 다시 연결해주면 된다.

모든 명령어를 수행한 뒤에 스택에 남아있는 행들은 X 처리해주면 끝!

 

 

C++ 코드

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함