Algorithm
[프로그래머스] 숫자 게임
쑤야.
2024. 1. 17. 13:45
https://school.programmers.co.kr/learn/courses/30/lessons/12987?language=python3
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
접근
- b 팀에서 가능한 모든 순서를 만들어서 탐색한다 → 데이터가 10M, 시간초과
➡️ 각 원소당 한 번씩만 탐색하여 끝내야 한다 - A의 순서 데이터를 보존할 필요가 없으며, 현재 차례에 대해서 b가 a 보다 단 1점이라도 크면 된다 → 정렬과 포인터 사용
로직
- a와 b 데이터를 내림차순으로 정렬한다
- b의 포인터를 0으로 초기화한다
- a에 대해 반복문으로 수행하면서 현재 a 원소값보다 b 포인터가 가리키고 있는 b 원소값이 큰 경우 승리를 의미하므로 answer와 b 포인터를 1 증가시킨다
코드
1. Swift 풀이
func solution(_ a:[Int], _ b:[Int]) -> Int {
let a = a.sorted(by: >)
let b = b.sorted(by: >)
var ap = 0, bp = 0
var answer = 0
while ap < a.count && bp < b.count {
if a[ap] < b[bp] {
answer += 1
bp += 1
ap += 1
}
else {
ap += 1
}
}
return answer
}
2. Python 풀이
def solution(A, B):
a = sorted(A, reverse=True)
b = sorted(B, reverse=True)
answer = 0
bp = 0
for i in a :
if i < b[bp] :
answer += 1
bp += 1
return answer