문제: 크레인 인형뽑기 게임 (programmers.co.kr/learn/courses/30/lessons/64061)

 

문제는 엄청 긴데 실상 요약해보자면 간단하다

 

2차원 배열이 주어졌을때 x의 값으로 y값 루프를 돌 수 있는가

 

 

우선 기본으로 주어지는건 

board:[[Int]] 와

moves:[Int] 이다.

그리고 추가로 선언할 배열 basket이 필요하다.

 

moves의 값을 foreach로 받으면서

0이 아닌 y배열을 찾는 문제이다.

 

아래 배열은 예시로 주어진 배열이다.

0 0 0 0 0
0 0 1 0 3
0 2 5 0 1
4 2 4 4 2
3 5 1 3 1

이 배열에서 만약 moves의 값이 1이 나왔을경우

x값은 첫번째 인덱스인 0으로 주어지고

해당 열을 탐색하고 값을 찾으면 다음 moves값을 받으면 될것이다.

moves값이 1이였으니 찾는 값은 4가 나오고 해당 값을 basket에 넣으면서 이전 넣었던 값과 비교하여 같을경우 두 아이템을 삭제하고 count를 +2 하면 된다.

 

for x in moves {
  let index = x - 1
  for y in 0 ..< board.count {
    if board[y][index] != 0 {
      바스켓값 비교 및 바스켓에 삽입 등 삭제시 카운트 증가
      break
    }
  }
}

 

 

 

해당 내용의 깃허브에 올려놨다.

github.com/wiwi-git/Programmers-learn/blob/master/swift/Practice/Practice/UFOGame.swift

 

wiwi-git/Programmers-learn

Contribute to wiwi-git/Programmers-learn development by creating an account on GitHub.

github.com

 

 

문제 자체는 들어오는 문자열의 파싱이나 검색을 할수 있는지 묻는 문제로 보인다.

입력형식은 고정되어있기에 split 을 통해 파싱해서 2개냐 3개냐로도 판단할수있고

처음에검색을통해 종류를 판별후 서브스트링으로 만들어 풀수도 있겠다 싶다.

 

아래 소스에서는 enum으로 종류를 넣고 HashMap을통해 닉네임을 덮어쓰기를 하도록했다

import java.util.ArrayList;
import java.util.HashMap;

public class Solution {
	enum recordType { Enter,Leave,Change,ERROR }
	
	public String[] solution(String[] record) {
		
		HashMap<String, String> usersMap = new HashMap<>();
		ArrayList<String> midResult = new ArrayList<>();
		
		String[] answer; // 뒤에서 초기화 해주자
		
		for(int i = 0 ; i < record.length ; i++) {
			//회원별 저장
			String msg = record[i];
			String[] sub = msg.split(" ");
			recordType type;
			
			if(sub.length >= 2) {
				String key = "";
				type = recordType.valueOf(sub[0]);
				key = sub[1];
				if(type != recordType.Leave && type != recordType.ERROR) {
					if(sub.length > 2) {
						String name = sub[2];
						usersMap.put(key, name);
					}
				}
				if(type != recordType.Change) {
					midResult.add(key + ";" + type.toString());
				}
			} else {
				System.out.println("ERROR msg parse");			
				return new String[] {};
			}
		}
		
		
		answer = new String[midResult.size()];
		
		for (int i = 0; i < midResult.size(); i++) {
			String mid = midResult.get(i);
			String[] sub = mid.split(";");
			String name = usersMap.get(sub[0]) != null ? usersMap.get(sub[0]) : "";
			recordType type = recordType.valueOf(sub[1]) != null ? recordType.valueOf(sub[1]): recordType.ERROR;
			
			answer[i] = name + "님이";
			
			switch (type) {
			case Enter:
				answer[i] += " 들어왔습니다.";
				break;
			case Leave:
				answer[i] += " 나갔습니다.";
				break;
			case Change:case ERROR:default:
				answer[i] += "";
				break;
			}
		}
		return answer;
	}
}

http://tech.kakao.com/2018/09/21/kakao-blind-recruitment-for2019-round-1/

 

2019 카카오 신입 공채 1차 코딩 테스트 문제 해설

작년에 이어 올해도 블라인드 전형으로 카카오 개발 신입 공채가 시작되었습니다! 그 첫 번째 관문으로 1차 온라인 코딩 테스트가 지난 9월 15일(토) 오후 2시부터 7시까지 5시간 동안 치러졌는데요. 지원자분들 만큼이나 준비위원들도 테스트가 문제없이, 공정하게 치러질 수 있도록 많은 준비를 했고 두근 거리는 마음으로 끝까지 온라인 테스트를 모니터링했답니다. 문제는 작년과 비슷하게 구현 문제 위주로 쉬운 난이도에서 어려운 난이도 순으로 풀 수 있도록 차례대

tech.kakao.com

 

+ Recent posts