-
프로그래머스 (Level 1) - 완주하지 못한 선수Coding Test/Coding Test 문제 풀이 2021. 12. 26. 23:17
문제 설명
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수
programmers.co.kr
풀이
처음에는 이중 반복문을 통해서 문제를 해결하고자 하였다.
이중 반복문을 사용하면 마라톤의 참여한 선수는 최대 100,000명이기 때문에, 100,000 * 100,000의 연산이 필요했다. 따라서, 시간 복잡도를 고려하면 다른 방식이 필요하다고 생각하였다.
시간 복잡도를 줄이기 위해 HashMap 자료구조를 사용하였다.
처음에는 마라톤 참가자 배열(participant)을 하나씩 탐색하면서 (마라톤 참가자, 1)의 형태로 HashMap에 저장을 하였다. 이때, 중복된 이름의 참가자가 있을 경우 (마라톤 참가자, 기존의 value + 1)의 형태로 저장을 하였다.
마라톤 참가자 배열(participant)의 탐색이 끝났으면, 완주한 선수의 배열(completion)을 탐색하면서 동일한 HashMap에 (마라톤 참가자, 기존의 value - 1)의 형태로 저장을 했다.
모든 배열의 탐색이 끝났을 경우, HashMap 내의 value가 0인 마라톤 참가자는 완주가 끝난 선수가 될 것이며, value가 0이 아닌 마라톤 참가자는 완주를 못한 선수가 된다.
전체 소스코드
import java.io.*; import java.util.*; public class Solution06 { public String solution(String[] participant, String[] completion) { Map<String, Integer> map = new HashMap<>(); for (String string : participant) { if (map.containsKey(string)) map.put(string, map.get(string) + 1); else map.put(string, 1); } for (String string : completion) { map.put(string, map.get(string) - 1); } String answer = ""; for (String string : map.keySet()) { if (map.get(string) != 0) answer = string; } return answer; } }
728x90'Coding Test > Coding Test 문제 풀이' 카테고리의 다른 글
프래그래머스 (Level 1) - 모의고사 (0) 2021.12.27 프로그래머스 (Level 1) - K번째수 (0) 2021.12.27 프로그래머스 (Level 1) - 소수 만들기 (0) 2021.12.26 프로그래머스 (Leve 1) - 내적 (0) 2021.12.26 프로그래머스 (Level 1) - 없는 숫자 더하기 (0) 2021.12.26