본문 바로가기

코딩테스트/카카오5

뉴스 클러스터링 교집합, 합집합 구하는 문제이다. 대문자, 소문자 구분을 하지 않기 때문에 모두 소문자로 치환을 해주었다. 문자열을 기준으로 문제에서 요하는 하나의 원소(2글자씩 끊기)들을 전부 구해주고 HashMap을 사용하여 해당 원소들의 개수를 세주었다. 물론 알파벳이 아닌 문자가 들어왔을 때는 집합에 추가하지 않는 예외처리 역시 해주었다. 그리고 HashMap을 통해 1번 Map에 있는 원소를 기준으로 2번 Map에 있는지, 둘 다 있다면 교집합이기 때문에 적은 것의 개수를 교집합으로 세주었고다. 합집합의 경우에는 1번과 2번에 동시에 있는 원소라면 큰 원소를 합집합에 더해주고 1번에만 있는 것은 그냥 더해주었다. 그리고 동시에 있는 원소는 1번을 기준으로 체크하면서 2번에서 삭제하였다. 그래서 마지막에 2번에 .. 2020. 3. 29.
문자열 압축 2020카카오 블라인드 공채에서 풀었던 문제이다. 중복되는 문자열을 줄이는게 핵심이다. 중복되는 문자열의 길이는 같아야한다. (가장 최적으로 중복을 없개는 게 아니다. Ex> aaabcbc != 3a2bc) 그래서 반복은 최대 문자열 길이의 반까지 될 수 있다. 길이가 10인 문자열에서 6인 문자열이 중복 될 수는 없기 때문이다. 그래서 길이가 1부터 문자열의 반까지 앞에서부터 잘라서 비교를 해보았다. 그래서 기준 문자열과 다음 문자열이 같으면 ++, 다르면 줄인 문자열을 생성해주었다. 그리고 더 이상 반복이 안되는 경우 (나머지)는 그냥 줄인 문자열 뒤에 붙여주었다. 여기서 길이가 1인 문자열인 케이스를 놓쳐서 조금 헤맸었다. 다음은 코드 전문이다. class Solution { public int s.. 2020. 3. 29.
실패율 배열을 다루는 문제이다. 간단하게 요약하면 배열에서 각 스테이지보다 더 전진한 유저수를 다 더하고 해당 스테이지에 머물고 있는 유저수를 세서 실패율을 구하고 실패율을 Sorting하면 완료된다. 이번에도 각 스테이지의 유저수를 핸들링하기 위해 클래스를 생성하였다. (지금 보니 클래스명이 Stage가 더 적절한거 같은데...) class Score { int endPlayer; int nowPlayer; Score(){ endPlayer = 0; nowPlayer = 0; } } Score 배열을 스테이지 수만큼 만들어주고 반복문을 통해 각 스테이지의 유저수를 카운팅해주었다. double biggestRate = 0; int index = 0; for(int i = 0; i < N; i++) { bigge.. 2020. 3. 22.
다트 게임 String에서 원하는 정보를 Parsing하는 문제이다. 입력 형식이 점수,보너스,옵션(선택)인 문자열이 붙어서 나열되어있다. 이때 고려해야 하는 점은 점수가 0~9까지는 1자리 이지만 10까지 고려해야한다는 점(1이나왔지만 바로 다음 문자가 보너스가 아닐 수도 있음) 그리고 옵션이 항상 있는 것은 아니라는 점이다. 이 문제를 해결하기 위해 점수 1세트를 클래스로 정의하고 먼저 Parsing을 시도하였다. class Score { int score; char bonus; char opt; Score(){ score = 0; bonus = 'S'; opt = 'N'; } } 문자열에서 점수를 얻어오는 함수이다. public int getScore(int start, String str) { int sco.. 2020. 3. 22.