Post

Programmers_Summer/Winter Coding(~2018) 숫자 게임(python)

프로그래머스 -숫자 게임 문제 입니다.

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/12987


2. 분류 및 난이도

Programmers 문제입니다.
Summer/Winter Coding(~2018) 문제입니다.

Level 3난이도의 문제입니다.


3. 생각한 것들(문제 접근 방법)

  • B입장에서 가장 기분 좋은 승리는 무엇일까?를 생각해봤습니다.
  • B입장에서 가장 기분 좋게 승리하는 방법은 A낸 카드에서 제일 근소한 차이를 내며 이기는 방법이 좋은 승리라고 생각했습니다.
  • 예를 들어서 A가 [1,3,5,7]를 들고 있고 B가 [8,6,4,2]를 들고 있으면 [2,4,6,8]로 가장 근소한 차이로 승점을 4개를 챙길 수 있습니다.
  • 이러한 방식을 대입하려면 A와 B를 정렬해야한다고 생각했습니다.(문제에서 어차피 A의 패를 알고 B는 그에 맞춰 내기 때문에 순서는 상관없음.)
  • 근데 만약 [1,3,5,7]를 들고 있는데, B가 [2,2,6,8] 이렇게 들고 있으면 어떻게해야할까?
  • 간단합니다. 문제가 되는 두 번째 [2] 카드를 그냥 버리고 6을 내면 됩니다.
  • 앞에서 지나 뒤에서 지나 똑같기 때문입니다.

4. 접근 방법을 적용한 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def solution(A, B):
    answer = 0
    A.sort()
    B.sort()
    Aidx = 0
    Bidx = 0 
    #A의 끝을 보면 A를 다 이긴 것이고,  B의 끝을 보면 B에서 더 이상 이길 수 있는 카드가 없다는 것입니다.
    while Aidx < len(A) and Bidx < len(B) :
        if A[Aidx] <B[Bidx] : 
            answer+=1
            Aidx +=1
            Bidx+=1
        #이기는 카드를 찾을 때 까지.
        else : 
            Bidx+=1
            
        
    return answer

5. 결과

필요시. c++ 짜드리겠습니다. 설명이 필요시 댓글달아주세요.

This post is licensed under CC BY 4.0 by the author.