땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • D
  • I
  • 이것이 리눅스다 with Rocky Linux9
  • ㅗ
  • E

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

프로그래머스 양궁대회(시뮬레이션, 그리디)
Algorithm/Algorithm Problem

프로그래머스 양궁대회(시뮬레이션, 그리디)

2022. 4. 14. 21:42

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

 

코딩테스트 연습 - 양궁대회

문제 설명 카카오배 양궁대회가 열렸습니다. 라이언은 저번 카카오배 양궁대회 우승자이고 이번 대회에도 결승전까지 올라왔습니다. 결승전 상대는 어피치입니다. 카카오배 양궁대회 운영위원

programmers.co.kr

<시뮬레이션>

#시뮬레이션

from itertools import combinations_with_replacement

# a가 b보다 더 좋은 배치일 경우 true
def cmp(a, b):
    return a[::-1] > b[::-1]

def solution(n, info):
    # 라이언이 가장 큰 점수 차이로 우승할 수 있는 결과를 저장
    # ret[0..10] : 10-i점에서 라이언이 맞힌 화살의 수, ret[11] : 점수 차이
    ret = [-1] * 12
    for comb in combinations_with_replacement(range(11), n):
        arrow = [0] * 12
        score = 0
        for x in comb: arrow[x] += 1
        for i in range(11):
            if arrow[i] > info[i]:
                score += (10 - i)
            elif info[i] != 0:
                score -= (10 - i)
        if score <= 0: continue
        arrow[11] = score
        if cmp(arrow, ret):
            ret = arrow[:] # deepcopy를 해야 함에 주의
    if ret[0] == -1: return [-1]
    return ret[:-1]

 

<그리디>

#그리디 

# a가 b보다 더 좋은 배치일 경우 true
def cmp(a, b):
    return a[::-1] > b[::-1]

def solution(n, info):
    # 라이언이 가장 큰 점수 차이로 우승할 수 있는 결과를 저장
    # ret[0..10] : 10-i점에서 라이언이 맞힌 화살의 수, ret[11] : 점수 차이
    ret = [-1] * 12
    for brute in range(1024):
        arrow = [0] * 12
        score = 0
        left = n # 남아있는 화살의 수
        for i in range(10):
            if brute & (1 << i): # i번째 비트가 켜져 있는 경우(10-i점에서 승리할 계획)
                score += (10 - i)
                left -= (info[i] + 1)
                arrow[i] = info[i] + 1
            elif info[i] != 0:
                score -= (10 - i)
        # 라이언의 점수가 높지 않거나 화살을 n발 초과로 쏜 경우
        if score <= 0 or left < 0: continue
        arrow[10], arrow[11] = left, score
        # arrow가 기존에 저장된 ret보다 좋을 경우
        if cmp(arrow, ret): ret = arrow[:] # deepcopy를 해야 함에 주의
    if ret[0] == -1: return [-1]
    return ret[:-1]

 

출처 : https://blog.encrypted.gg/1028

'Algorithm > Algorithm Problem' 카테고리의 다른 글

백준 1107 리모콘(Brute-Force)  (0) 2022.05.04
백준 11403 경로찾기(DFS,BFS, Floyd-Warshall)  (0) 2022.05.04
프로그래머스 쿼드압축 후 개수 새기(분할 정복)  (0) 2022.04.14
백준 18243 Small World Network(플로이드-와샬, BFS)  (0) 2022.04.07
10816 숫자 카드 2(Hashmap, Counter)  (0) 2022.04.02
    'Algorithm/Algorithm Problem' 카테고리의 다른 글
    • 백준 1107 리모콘(Brute-Force)
    • 백준 11403 경로찾기(DFS,BFS, Floyd-Warshall)
    • 프로그래머스 쿼드압축 후 개수 새기(분할 정복)
    • 백준 18243 Small World Network(플로이드-와샬, BFS)
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바