살아가는 이유_EU
내가 살아가는 이유, 삶
살아가는 이유_EU
전체 방문자
오늘
어제
  • 삶 (159)
    • 이유's EATERY (16)
      • 맛집 (10)
      • 까페 (4)
      • 맛있는 Recipe (1)
    • 이유's LIFE (16)
      • 국내여행 (5)
      • 해외여행 (2)
      • 운동 (1)
      • 취업정보 (0)
      • 끄적끄적 (5)
      • 일기쟝 (3)
      • 세상 이야기 (0)
      • 결혼 준비 (0)
    • 이유's Programming (43)
      • JavaScript (6)
      • Java (7)
      • C++ (0)
      • DBMS (24)
      • Spring (3)
      • til (1)
      • HTTP (2)
    • 이유's REVIEW (13)
      • BOOK (6)
      • PROGRAM or MOVIE (5)
      • PRODUCT 제품리뷰 (2)
    • 이유's STUDY (31)
      • 수업 관련 (2)
      • IT 시사 (2)
      • IT NEWS (2)
      • IVIEW (0)
      • IOS 앱 만들기 (0)
      • 알고리즘 문제풀이 (23)
      • PM data literacy (2)
    • 이유's ENGLISH (13)
      • Writing about something! (12)
      • Feedback (1)
      • TIL (0)
    • 이유's DB 공부 (1)
      • MySQL DB (0)
      • Postgre (1)
    • Computer 공부 (17)
      • Backend question (10)
      • Clean architecture (2)
      • Operating system (2)
      • Network (3)
      • 항해 (0)

블로그 메뉴

  • 홈
  • EATERY's 맛집
  • CAFE 까페
  • Recipe 레시피
  • IT 공부
  • 방명록
  • 태그

공지사항

인기 글

태그

  • 고메동 카페
  • go hand in hand
  • map 하는 법
  • 자바스크립트
  • 현명하게 리액트
  • 삼돈식탁
  • 피지오필로소피
  • 어게인마이라이프
  • 렌더링 수 줄이기
  • 인절미 티라미수
  • React.memo
  • 고메커피
  • 용인추천
  • 자세요정
  • 스쿤브레드
  • Array로 접근
  • 용인까페
  • have something to do with뜻
  • 송계옥
  • 용인맛집
  • 흑임자 크림
  • 맛집
  • 파스타맛집
  • have something to do with
  • 아메리카토노
  • 영어공부
  • memoziation
  • key 로 접근
  • 스테이크
  • 묵리

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
살아가는 이유_EU

내가 살아가는 이유, 삶

Greedy algorith - 코딩테스트 [탐욕법] : 조이스틱
이유's STUDY/알고리즘 문제풀이

Greedy algorith - 코딩테스트 [탐욕법] : 조이스틱

2024. 11. 11. 15:37
728x90
반응형

탐욕법이란? 

- 최적의 값을 구해야 하는 상황에서 사용되는 근시안적인 방법론으로 ‘각 단계에서 최적이라고 생각되는 것을 선택’ 해 나가는 방식으로 진행하여 최종적인 해답에 도달하는 알고리즘입니다.
- 이때, 항상 최적의 값을 보장하는것이 아니라 최적의 값의 ‘근사한 값’을 목표로 하고 있습니다.

 

그래서 최종적인 해답에 도달해야하는 알고리즘이어서 항상 최적의 값의 "근사한 값"이 목표로 구해져야한다. 

 

💡 근시안적 방법론이란?

- 단기적인 목표를 중심으로 한 전략적인 접근 방법을 의미합니다. 이 방법론은 주로 현재의 문제를 해결하는 데 초점을 맞추며, 장기적인 전망보다는 단기적인 성과를 중요시합니다.

 

그래서 오늘 풀 문제는?

- 코딩테스트 : 조이스틱

https://school.programmers.co.kr/learn/courses/30/lessons/42860 

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

어떻게 해야 가장 최적의 값을 할 수 있을까?? 

 

-> greedy 를 통해 인덱스와 이제 알파벳을 구한다

-> 알파벳 변경 횟수를 "A 방향에서 B 방향" 그리고 "A 방향에서 Z 방향" 

-> 가장 중요한 연속된 A 를 찾는 것  연속된 A를 찾는 부분 어디가 할 수 있을지 

 

def solution(name):
    
    # 알파벳 변경 횟수( 상하 이동 ) 
    spell_move = 0
    
    # 커서 이동 횟수, 이름의 길이 - 1( 좌우 이동 )
    cursor_move = len(name) - 1  
    
    
    for i, spell in enumerate(name):
    	# 알파벳 변경 횟수, 위아래 중 최소 이동 값 ( 상하 이동 )
        spell_move += min(ord(spell) - ord('A'), ord('Z') - ord(spell) + 1)
        
        # 해당 알파벳 다음부터 연속된 A 문자열 찾기
        next = i + 1
        while next < len(name) and name[next] == 'A':
            next += 1
            
        # 아래 3가지 경우 중 최소 이동 값으로 갱신
        # 1. 이전 커서 이동 값 ( 초기값 - 이름의 길이 - 1 )
        # 2. 연속된 A의 왼쪽 시작
        # 3. 연속된 A의 오른쪽 시작
        cursor_move = min([ cursor_move, 2 * i + len(name) - next, i + 2 * (len(name) - next) ])
        
        
    # 조이스틱 조작 횟수 = 알파벳 변경 횟수( 상하 이동 ) + 커서 이동 횟수( 좌우 이동 )    
    return spell_move + cursor_move
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'이유's STUDY > 알고리즘 문제풀이' 카테고리의 다른 글

[Leetcode] Add two numbers  (0) 2022.11.01
[ leetcode ] dfs 문제 - number of islands  (0) 2021.11.02
[ 자료구조 ] LinkedList  (0) 2021.08.26
[ 백준 ] 2580 번 - 스도쿠 / java 이용 / 아직 못 푼 문제 ㅠㅠ  (0) 2021.08.11
[ 백준 ] 1560번 - N과 m (2) --- java 이용  (0) 2021.08.06
    '이유's STUDY/알고리즘 문제풀이' 카테고리의 다른 글
    • [Leetcode] Add two numbers
    • [ leetcode ] dfs 문제 - number of islands
    • [ 자료구조 ] LinkedList
    • [ 백준 ] 2580 번 - 스도쿠 / java 이용 / 아직 못 푼 문제 ㅠㅠ
    살아가는 이유_EU
    살아가는 이유_EU
    안녕하세요. 초보개발자의 일상을 담은 블로그입니다.

    티스토리툴바