알고리즘/programmers

[Programmers] 순위 검색

꾸준함. 2022. 2. 11. 11:17

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/72412

 

코딩테스트 연습 - 순위 검색

["java backend junior pizza 150","python frontend senior chicken 210","python frontend senior chicken 150","cpp backend senior pizza 260","java backend junior chicken 80","python backend senior chicken 50"] ["java and backend and junior and pizza 100","pyt

programmers.co.kr

생각보다 까다로운 문제였습니다.

초기에는 '-'를 '*'로 치환하고 공백을 없앤 뒤 정규문법식으로 비교하고자 했는데 regex 라이브러리 내 regex_match 메서드 수행 속도가  엄청 느려서 시간 초과가 발생했습니다.

따라서, 배열로 접근하여 풀었고 알고리즘은 아래와 같습니다.

1. 우선, scores라는 벡터 배열을 선언하였고 언어, 직군, 경력, 소울푸드를 구분하기 위해 4차원 벡터 배열로 선언했습니다. 

2. info 배열 내 개발언어, 직군, 경력, 소울푸드를 queries 배열에 넣고 점수는 별도로 저장한 뒤 State라는 구조체로 묶었습니다.

2.1 2번에서 구한 State 구조체를 기반으로 1번에 선언한 벡터 배열에 점수를 추가했습니다.

3. 각 query에 대해 2번과 2.1번을 진행한 뒤 2번에서 전처리한 scores 벡터 배열과 비교하여 조건이 만족하는지 확인한 뒤 answer 벡터에 답을 추가했습니다.

3.1 여기서 비교할 때 '-'일 경우 모든 경우의 수를 비교해줘야합니다. 예를 들어 언어가 '-'라면 java, ptyhon, c++에 대해 다 확인해줘야 합니다. 따라서, 5차원 for문을 진행해줘야 합니다.

 

* c++가 아닌 java로 풀었다면 regex를 통해 좀 더 쉽게 풀었을 것 같습니다.

 

 

개발환경: Programmers IDE

 

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > programmers' 카테고리의 다른 글

[Programmers] [1차] 프렌즈4블록  (0) 2022.02.14
[Programmers] 후보키  (0) 2022.02.12
[Programmers] 튜플  (0) 2022.02.09
[Programmers] 수식 최대화  (0) 2022.02.02
[Programmers] 거리두기 확인하기  (0) 2022.01.31