문제: 크레인 인형뽑기 게임 (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

 

반응형

https://www.welcomekakao.com/learn/courses/30/lessons/42889

 

코딩테스트 연습 - 실패율 | 프로그래머스

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를

www.welcomekakao.com

 

 

1번스테이지부터 최종 스테이지까지

실패한 사람을 카운트

 

1번 스테이지 = 1번 카운트 / 총인원

2번 스테이지 = 2번 카운트 / (총인원 - 1번 카운트)

를 반복해서 구하는것으로 최종 각 스테이지별 실패율을 구했습니다.

 

조금 고민한 부분이 실패율별 내림차순 정렬해서 출력하는건데

그냥 버블정렬을 사용했어요.

버블정렬만세.....

 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
 
public class Solution {
	public int[] solution(int N, int[] stages) {
		int stagesCount = stages.length;
		ArrayList<Integer> copySta = new ArrayList<>();
		
		//fail 부분은 인덱스 1 부터 사용할래
		int[] failCount = new int[N+1];
		double[] failP = new double[N+1];
		
		
		
		for (int i = 0; i < failCount.length; i++) {
			failCount[i] = 0;
		}
		
		for (int i = 0; i < failP.length; i++) {
			failP[i] = 0.0;
		}
		
		for (Integer integer : stages) {
			copySta.add(integer);
		}
		
		
		for (int i = 1; i <= N; i++) {
			for (Integer integer : copySta) {
				if(integer == i) {
					failCount[i]++;
				}
			}
		}
		
		for (int i = 1; i < failCount.length; i++) {
			failP[i] = (double)failCount[i] / stagesCount;
			stagesCount -= failCount[i];
		}
		
		HashMap<Integer, Double> pair  = new HashMap<>();
		for (int i = 1; i <= N; i++) {
			pair.put(i, failP[i]);
		}
		
		int[] sortTemp = new int[pair.size() + 1]; 
		Iterator<Integer> keys = pair.keySet().iterator();
		int index = 1;
		while(keys.hasNext()){
			sortTemp[index] = keys.next();
			index++;
		}
		
//		for(int t: sortTemp) {
//			System.out.println("key:" + t + " value:" + pair.get(t));
//		}
		
		
		//keys = pair.keySet().iterator();
		for (int i = 1; i <= sortTemp.length; i++) {
			for(int j = 1 ; j <= sortTemp.length - i - 1 ; j++) {
				//System.out.println("j:" + j + " " + pair.get(sortTemp[j]) + " < " + "j+1:" + (j+1) + " " + pair.get(sortTemp[j+1]) + " = " + (pair.get(sortTemp[j]) <  pair.get(sortTemp[j+1])));
	            if(pair.get(sortTemp[j]) <  pair.get(sortTemp[j+1])) {
	                int temp = sortTemp[j+1];
	                sortTemp[j+1] = sortTemp[j];
	                sortTemp[j] = temp;
	            }
	        }
			
//			System.out.print("i:" + i + " 루프의 결과 = ");
//			for(int t: sortTemp) {
//				System.out.print(t + " ");
//			}
//			System.out.println();
		}
		int[] answer = new int[sortTemp.length - 1];
		
		for (int i = 1; i < sortTemp.length; i++) {
			answer[i - 1] = sortTemp[i];
		}
		
		return answer;
	}
}

저장이나 정렬부분은 더 깔끔히 하신분이 많으신듯하지만

역시 바로떠오르는건 이런것뿐이네요.

 

반응형

+ Recent posts