오늘은 자신감 회복을 위해서 매우 기본적인 문제를 풀어봤다 !

문제

영관이는 게임을 좋아한다. 별의별 게임을 다 하지만 그 중에서 제일 좋아하는 게임은 모두의 마블이다. 어김없이 오늘도 영관이는 학교 가는 버스에서 캐릭터 합성 이벤트를 참여했다.

이번 이벤트는 다음과 같다. 순서가 매겨진 여러 장의 카드가 있다. 각각의 카드는 저마다 레벨이 있다.

카드 A에 카드 B를 덧붙일 수 있다. 이때 붙이는 조건은 다음과 같다.

  1. 두 카드는 인접한 카드여야 한다.
  2. 업그레이드 된 카드 A의 레벨은 변하지 않는다.

카드 합성을 할 때마다 두 카드 레벨의 합만큼 골드를 받는다.

영관이가 골드를 최대한 많이 받을 수 있게 여러분이 도와주자.

예를 들어, c1, c2, c3로 연속된 카드 3개가 있고 각각 레벨이 40,30,30 이라고 하자.

이 카드들을 합치는 과정에서, 먼저 c3에 c2를 합쳐 임시 카드 x1을 만든다. x1의 레벨은 30이고 획득 골드는 60이다. 그 다음엔 c1에 x1을 합쳐 카드 x2를 만들면 레벨이 40이고 70만큼의 골드를 획득할 수 있다. 이때, 영관이가 획득한 골드는 70+60 = 130이다.

다른 방법으로 c1에 c2를 덧붙인 카드 x1을 만들면, x1의 레벨은 40이고 획득한 골드는 70이다.

x1에 c3를 덧붙인 카드 x2의 레벨은 40이고 획득 골드는 70이다. 이때, 영관이가 획득한 골드는 70 + 70 = 140이다. 이외에 더 많은 골드를 받는 방법이 없으므로 140이 획득할 수 있는 최대 골드이다.

예시

입력

3
40 30 30

출력

140

푸는 법

카드 n 개면 n-1번 합쳐야한다.

양 옆에 있는 카드만 합칠 수 있으므로 한번 기준 카드가 된 카드의 레벨은 계속 유지된다.

여기서 기준 카드라고 함은 ‘이 카드에다가 다른 카드를 합친다’ 의 의미이다

가령 7개의 카드가 있다고 하고 기준 카드의 레벨을 x , 다른 카드들의 레벨을 a,b,c,d,e,f 이고

카드가 a b c d x e f 이렇게 나열되어있다고 하면

x + e

x + f

d + x

c + x

b + x

a + x

이렇게 총 6번 합칠 수 있다.

정리해보면 총 획득하는 골드는 (n-1) * 기준 카드 + 나머지 카드들의 합 이다

이게 최대가 되게 하려고 하면 (n-1) 이라는 큰 숫자가 곱해질 수 있는 기준 카드 자리에 가장 높은 레벨 값이 들어가야한다. n-1 이 곱해져있으므로 좌측 ((n-1)*기준카드) 를 키워주는 것이 우측 (나머지 카드들의 합) 에 신경써주는 것보다 취하는 이득이 크기 때문이다.

코드

import sys
class Marble:
    def read(self):
        self.card_n=int(input())
        self.cards=list(map(int,sys.stdin.readline().split()))
        
    def answer(self):
        self.center=max(self.cards)
        self.cards.remove(self.center)
        answer=self.center*(self.card_n-1)+sum(self.cards)
        return answer

marble=Marble()
marble.read()
print(marble.answer())

취업할 수 있을까

나는 이제 20대 후반을 향해 조금씩 달려가고 있다. 더 이상 어린 아이가 아니기 때문에 (아니 난 아직 어리다구욧) 나이값은 하는 사람이 되고 싶다. 내가 되고 싶은 사람구실하는 사람은 적어도 떳떳하게 (합법적인 경로로) 먹고 살 정도의 능력을 갖추고 내 살 길이 급하지만 죄를 저지르거나 사회에서 매너의 선을 넘지 않는 사람이다. (여기에 욕심일 수 있겠지만 따스함 한스푼도 더한 사람이 되고 싶다) . 나는 매사에 참 부족하고 실수도 많은 너무나도 인간적인 사람이기 때문에 조금씩 나이만 성인이 아닌 진짜 성인으로서 나아가고 싶다. 유튜브에서 이시언 씨가 배우 지망생 후배에게 조언해주는 현실감 있는 영상을 봤는데 취미로 무언가를 하는 것과 업으로 그 일을 선택하는 것에는 명확한 경계가 있다는 것이 느껴졌다.

내가 원하는 직무로 내가 바라는 사람구실하는 커리어로 진입하려면 1. 연구실적이 있어야 하고 2. 수학,통계 지식이 있어야 하고 3. 논문을 코드로 구현할 정도의 코딩 실력이 있어야한다. (feat.코테)

사실 내가 채용자여도 이 세가지를 모두 갖춘 사람을 원할 것이다. 가끔 대학원 커뮤니티나 구글링을 통해 인공지능 직무로 취업하는 사람들을 검색해보면 참 치열한 필드이고 쉽지 않다는 생각이 든다.

애초에 기본기가 많이 부족한 상태에서 나보다 훨씬 앞서서 기초를 닦은 사람들이 많은 필드로 내 발로 들어왔기 때문에 한번에 전문가로 인정받을 것이라는 것은 꿈에도 생각하지 않는다. 그저 우선은 취미와 취업의 경계에서 취업의 문을 열 수 있을 정도의 기본 실력을 갖추고 IT 분야는 평생 공부해야 함을 감안하고 그 이후 조금씩 더디게 성장하면서 점점 내가 그리는 모습으로 나아가고 싶다.

3번 코딩 실력 중 코테는 주변에서 요즘 코테는 워낙 인강과 문제집 사이트들이 잘 구축되어있기도 하고 그렇기 때문에 크게는 걱정하지 말라고 말을 많이 들었다. 그런데 그게 어느정도 노력은 하면 통과할 수 있는 정도이다 의 의미겠죠 .. ? (그리고 연구실적으로 압살해서 코테 안 본 분들 이야기도 들었는데 어느 하나 내가 장담할 수 있는게 없으니깐 다 준비해야하는 😂) 알고리즘 문제들.. 그냥 수수께끼로 보면 재미있긴한데 이걸 잘 풀어야하고 언젠간 테스트를 본다고 생각하면 참 쉽지 않다.

그래서

**코테는 적어도 2년간 굵직굵직한 알고리즘 유형 위주로 최소 300 문제를 풀기로 했다. 그냥 푸는 게 아니라 제대로 이해하고 최대한 내 힘으로 풀고 풀이법도 정리해서 올리는 기준으로 **

그래서

10문제를 풀 때마다 내 자신에게 상을 줄 것이다. 나약한 내 자신아 정말 수고하고 있어의 의미 !

그래서

그러면 맛있는 거를 먹어야하는데 요즘 살이 너무 많이 쪄서 맛있는 거 말고 평소 진짜 하고 싶었는데 바빠서 못한 휴일을 만끽하는 선물을 주려고 한다. (서울숲에서 자전거 타고 네일아트 받기,해리포터 1편부터 8편까지 다 몰아보기)

그리고 10문제까지 한 문제 남았다. 오늘 모두의 마블을 기점으로 9문제 풀었닷

결론은 놀고 싶다는 뜻 ! ><