글을 시작하며

이전 포스트에서는 찬성 편을 다뤘습니다. 관심이 있으신 분들은 아래의 링크를 통해 찬성 편을 읽으시고 의견이 있으시다면 댓글 남겨주시면 감사하겠습니다!😃

 

[암호화 화폐] 암호화 화폐가 실물화폐를 대체할 수 있을까 - 찬성편

글을 시작하며 이전 포스트에서 암호화 화폐가 어떻게 시작했는지와 만들어지는 과정을 이전 포스트에서 작성했습니다. 관심 있으신 분들은 아래 링크를 클릭하여 확인해주세요😁 [암호화 화

hwanii-with.tistory.com

 

그럼 글 시작하겠습니다.

반대 부분

안전성 보장의 리스크

대부분의 거래소와 지갑 서비스가 사용자들에게 신분증명을 요구하면서도 은행과 같은 수준의 보호 기능은 제공하지 않고 있습니다. 예를 들어, 거래소가 파산하거나 해킹 공격을 당했을 경우 사용자 자금에 대한 보장은 매우 제한적이거나 아예 없을 수도 있습니다. 실제로 중국의 거래소 마운트곡스(Mt.Gox)가 파산을 신청하고 고객 비트코인 75만 개를 분실했다고 한 사실과 지난 19년 3월 빗썸 거래소 소유분의 암호화폐에 대한 해킹사고가 있습니다. 빗썸 해킹사고는 빗썸 거래소가 소유하고 있는 EOS와 XRP 총합 230억을 내부자가 개인의 지갑으로 횡령을 한 사건입니다. 이 같은 사례를 보면 비트코인이 아직 전 세계 대부분의 국가에서 법정화폐로서의 지위를 인정받지 못하고 있어 정부 당국이 도난 사건에 대해 어떻게 대응해야 할지 잘 알지 못하는 경우가 많습니다.

추가적으로 사용자의 부주의로 보안 장치나 비밀번호가 노출되어 암호화폐 도난 사건이 발생한 경우에는 고객 자금을 돌려받을 방법이 전혀 보장되지 않습니다.(거래 취소 불가능)

 

법적 지위상의 문제

암호화 화폐의 법적 지위는 국가마다 크게 다릅니다. 일부 국가에서는 암호화 화폐의 사용과 거래가 권장되고 있는 한편 다른 국가에서는 전면 금지되어 있습니다. 

게다가 암호화 화폐이 범죄자들에게 어필한다는 사실에 대해 상당한 우려가 존재합니다. 일부 언론은 암호화 화폐는 불법적인 상품을 구입하는 데 사용될 수 있다는 점 때문에 존재하는 것이라고까지 주장하기도 합니다. 실제로 악명 높았던 인터넷의 암시장 실크로드(Silk Road)가 폐쇄됐을 당시 비트코인 가격이 급락했던 일도 있었습니다.

 

느린 속도

암호화 화폐를 거래하는데 소요되는 속도는 최소 10분이며, 몇 시간까지 걸리기도 합니다. 그 이유는 암호화 화폐은 디지털 데이터를 화폐로 사용되기 위해, 암호해독에 참여하는 노드들이 랜덤 하게 거래를 검증하는 메커니즘을 만들고, 10분에 한 번씩 검증된 작업이 장부에 기입되어 블록으로 만들어지며, 블록이 생성되면서 화폐도 발행되도록 설계되었습니다. 이러한 과정은 믿을 수 있는 화폐가 되기 위해 필요한 과정이지만, 이로 인해 거래속도가 느려지게 됩니다.

암호화 화폐에서 대표적인 비트코인의 네트워크의 초당 거래량(TPS : Transaction Per Second)은 6개로 페이팔의 193개, 비자의 24,000개보다 현저히 느립니다.

 

느린 의사결정

탈중앙화된 화폐 발행은, 특정 국가나 기관 혹은 개인이 화폐정책에 대해 독단적으로 결정할 수 없다는 뜻이고, 필연적으로 정작 필요한 의사결정을 내려야 할 순간에 투표를 통해 결정해야 해서, 업그레이드가 느리다는 단점이 있습니다.

암호화폐는 '프로토콜'이라는 네트워크의 사용자들(노드)간의 합의된 규칙을 바꾼다면 속도, 익명성 등과 같은 단점을 개선할 수 있지만, 이를 위해서는 네트워크 참여자들 간 투표를 통과해야 합니다. 대표적으로 비트코인 개선안(BIP : Bitcoin Improvement Proposal)이 제안되면, 채굴자들은 채굴을 통해 개선안에 투표하거나 반대할 수 있습니다. 이때 투표에 걸리는 시간이 길어지기 때문에, 필요한 개선안이 나와도 실제로 적용되기까지는 상당히 오랜 시간이 걸리며, 이해관계에 의해 채택되지 않을 수도 있습니다.

이처럼 비트코인의 의사결정 방식은 장단점이 뚜렷합니다. 현실세계의 여러 정치적 문제처럼, 참여자들의 이해관계로 인해 의사결정이 지연되며, 네트워크가 분리되는 것처럼 상황이 생기기도 합니다.

 

결론

암호화 화폐은 탈중앙화 됐으며 특정 국가, 개인으로부터 영향을 받지 않고 보안성도 있지만 이를 위해 속도를 포기하고 채굴에 많은 에너지를 쓰며, 투표를 통해 의사결정이 되기 때문에 의사결정이 복잡하고 느립니다. 그래서 화폐라고 하기에 거래 처리속도가 느리고, 정부와 같은 중앙화 된 주체가 시장에 적극 개입하여 환율을 조정하거나 화폐 발행을 통해 가격을 조정하지 않아서 가격 변동성 또한 높습니다.

이러한 이유때문에 암호화 화폐가 실물 화폐를 대체하는 것은 힘들다고 생각합니다.

 

이것으로 글을 마무리하겠습니다.

오늘 하루도 좋은 하루 보내세요😁

글을 시작하며

이전 포스트에서 암호화 화폐가 어떻게 시작했는지와 만들어지는 과정을 이전 포스트에서 작성했습니다.

관심 있으신 분들은 아래 링크를 클릭하여 확인해주세요😁

 

[암호화 화폐] 암호화 화폐가 무엇인가?

글을 시작하며 해당 글은 토론면접에 준비하기 위해서 생각정리용으로 작성한 글입니다.😀 잘못된 지식이 있다면 댓글을 통해서 알려주시면 수정하겠습니다! 암호화 화폐의 시작 2009년 초 사

hwanii-with.tistory.com

찬성편과 반대편 2가지로 나눠서 작성할 것이며 모든 근거는 객관적인 근거를 토대로 작성하려합니다. 혹시나 객관적이지 않다 생각하는 부분이 있으면 댓글을 남겨주시기 바랍니다!!

아래 내용의 출처는 kr.cointelegraph.com/bitcoin-for-beginners/what-is-bitcoin입니다.

 

찬성 부분

높은 보안성, 투명성과 중립성

익명성

비트코인에서 사용자가 알 수 있는 자신의 지갑에 저장되어 있는 비트코인의 액수와 거래 내역 정도에 불과합니다.

오늘날 은행들은 신용 내역과 주소, 전화번호, 쇼핑 습관 등 고객들에 대해 모든 것을 알고 있습니다. 반면에 비트코인은 지갑이 개인과 연계되어 있지 않기 때문에 누가 무엇을 하는지에 대해 전혀 알지 못합니다.

투명성

또한, 비트코인의 익명성은 상대적인 개념으로서 모든 비트코인 거래는 블록체인 상에 기록되어 있습니다. 따라서 적어도 이론적으로는 자신의 지갑 주소가 남들도 볼 수 있게 공개되어 있다면 누구든지 약간의 노력만 기울이면 내가 얼마의 비트코인을 보유하고 있는지 쉽게 알 수 있다는 것입니다. 그러나 개인과 연계된 특정 비트코인 주소를 추적하는 일은 거의 불가능하게 되어 있습니다. 자신의 거래 내역을 남들에게 보이길 원치 않는 사람들은 철저하게 익명성을 유지할 수 있습니다.

취소 불가능성

비트코인을 누구엔가 보낼 경우 수신자가 이를 반환하지 않는 한 이를 취소하는 것은 불가능합니다. 이런 특성 때문에 누구엔가 송급을 했는데 이를 받지 못했다고 사기 치는 것이 불가능합니다.

 

따라서 이를 바탕으로 비트코인 사용자들은 모든 거래를 하는데 있어 안심을 하고 거래를 할 수 있습니다. 즉 본인이 승인하지 않는 한 내 계좌에서 누가 돈을 인출할 수 없으며 가맹점에서 내 결제 정보를 훔쳐갈 수도 없다는 것입니다. 비트코인 사용자들은 백업 사본과 암호화 기술을 통해 자신의 자금을 보호할 수 있습니다. 이들의 신분과 개인정보는 결제시 공해야 할 필요가 없으므로 항상 보호되고 있다고 할 수 있습니다.

 

추가적으로 블록체인 상에서는 모든 거래 내역과 이와 관련된 정보를 누구든지 실시간으로 확인 파악할 수 있습니다. 비트코인 프로토콜은 암호화 처리가 되어 있어 어떤 개인이나 기관도 이를 제어하거나 조작할 수 없습니다. 네트워크는 분산형으로 되어 있으므로 이를 누구도 완벽하게 제어 할 방도가 없습니다. 이러한 이유로 비트코인은 언제나 중립적이고 높은 투명성을 유지하며 예측 가능하다는 것입니다.

 

PCI의 존재 불필요

PCI(Payment Card Industry)의 필요성이 없게 됩니다. PCI는 선불카드, 직불카드, ATM 등 관련된 사업자로 비자, 마스터카드 등 유명 신용카드 회사도 포함됩니다. 비트코인을 사용할 때 PCI 표준에 따라야 할 필요가 겂으며, 이에 따라 신용카드를 받지 않거나 신용카드 사용에 따라 당할 수 있는 사기를 줄일 수 있어 상당히 유용합니다. 또한, 사용자들은 PCI가 중간에 끼지 않아 낮은 수수료를 적용 받고 신용카드 통용이 어려운 시장에 새로 진출하고 관련된 행정비용도 줄일 수 있습니다.

 

현재 암호화 화폐로 결제 가능한 곳이 증가하고 있다.

현재 비트코인을 결제 수단으로 받아들이는 사업체가 증가하고 있습니다. 대표적으로 거대 온라인 소매업체인 오버스톡(Overstock)이나 뉴에그(Newegg)부터 해외 소교모 지역 소매업체, 술집, 레스토랑 등 다양하게 존재합니다. 에어 볼틱(AirBaltic)이나 에어 리투아니아(Air Lithuania) 같은 항공사들도 비트코인 결제를 혀용하고 있습니다. 추가적으로 애플 앱스토어에서는 10개의 암호화 화폐를 결제 수단으로 사용할 수 있습니다.

 

탈중앙화

전세계 모든 종류의 통화는 암호화 화폐를 제외하고 어떤 식으로든지 정부 권력과 관련이 있습니다. 모든 거래는 은행을 통해 이뤄지며 상당한 정도의 수수료를 지불해야 하며 송금을 할 경우 보내는 사람에게 도달할 때까지 상단한 시간이 걸립니다. 

하지만 비트코인은 이를 통제하는 사람이 없습니다. 이는 분권형 네트워크로서 여기에 참여하는 모든 사람들의 협력과 커뮤니케이션을 통해 작동이 됩니다. 그러한 이유로 해서 네트워크의 일부가 작동이 되지 않는다고 해도 거래는 여전히 정상적으로 이뤄질 수 있습니다.

 

현재 달러나 유로가 기축 통화로 사용되고 있습니다. 기축통화란 금을 대신하여 국제 결제, 자산보유의 수단으로 사용할 수 있는 통화를 가리킵니다. 예를 들어 미국달러화(USD)는 미국 돈이지만, 미국은 물론 세계적으로 유통되는 국제적 통화입니다. 그래서 극단적으로는 북한이나 러시아마저 국제거래에서 USD를 사용합니다.

 

2019년 미중 무역전쟁에서처럼 화폐가 국가의 영향을 받아 불안정한 상황 속에서 금과 은, 그리고 비트코인의 가치가 상승했습니다. 이번 코로나 사태를 통해서는 현재 미국 중앙은행 FAD가 코로나 사태로 인한 경기위축을 방지하기 위해 지속적으로 유동성 공급을 진행하고 있습니다. 이러한 과정 속에서 달러의 가치는 하락하고 있는 것을 환율에서 얻을 수 있습니다. 금과 은의 가치가 올라가는 것과 비트코인의 가치가 올라가는 것은 비트코인의 탈중앙화라는 이유가 크다고 생각합니다.

 

다음 편에서는 반대의 입장에서 글을 작성해보도록 하겠습니다.

오늘도 좋은 하루를 보내세요😁

문제후기

  1. 우선순위 큐를 활용한 문제로 Python은 우선순위 큐를 heap을 활용해서 해결합니다.
  2. 절대값이 기준이고 그 다음 기준이 숫자이므로 (절대값, 숫자) 형식으로 heap에 push합니다.
  3. 0이 나올 경우 heap에서 pop을 해서 출력합니다.

문제링크

 

11286번: 절댓값 힙

첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net


from sys import stdin
import heapq

N = int(stdin.readline())
# 우선순위 큐
heap = []

for n in range(N):
    num = int(stdin.readline())
    if num != 0:
        # 0이 아닌 경우 우선순위 큐에 (절대값, 숫자) 삽입
        heapq.heappush(heap,(abs(num), num))
    # 0인경우
    else:
        # 큐가 비어있으면 0 출력
        if len(heap) == 0:
            print(0)
        else:
            # 큐에 값이 있으면 pop
            print(heapq.heappop(heap)[1])

'백준' 카테고리의 다른 글

[백준] 가장 긴 바이토닉 부분 수열 -Python  (0) 2021.01.18
[백준] RGB거리 -Python  (0) 2021.01.14
[백준] 욕심쟁이 판다 -Python  (0) 2021.01.12
[백준] 미확인 도착지 -Python  (0) 2021.01.09
[백준] K번째 수 -Python  (0) 2021.01.08

글을 시작하며

해당 글은 토론면접에 준비하기 위해서 생각정리용으로 작성한 글입니다.😀

잘못된 지식이 있다면 댓글을 통해서 알려주시면 수정하겠습니다!

 

암호화 화폐의 시작

출처 : 코인데스크

2009년 초 사토시 나카모토(Satoshi Nakamoto)라는 별명을 가진 익명의 프로그래머(또는 복수의 프로그래머들)가 비트코인을 최초로 도입했다. 사토시는 이를 'P2P 전자현금 시스템(peer-to-peer electronic cash system)'이라고 불렀다. 이는 100% 분산형 시스템으로서 중앙 서버나 중앙관리자가 일체 존재하지 않았다. 이 컨셉은 파일 공유를 위한 P2P 네트워크와 거의 비슷한 형태였던 것입니다.

 

결제 네트워크(payment network)가 해결해야 할 가장 중요한 문제는 이중 지출(double spend)에 어떻게 대처하는가 이다. 이는 같은 금액을 두 번 지출하도록 하는 사기 수법인 것이다. 이에 대한 전통적인 솔루션은 신뢰할 수 있는 제 3(중앙서버)가 모든 잔액과 거래 내역에 대한 기록을 보관하고 있는 것이다. 그러나 이러한 방법의 문제는 자금 거래 내역과 개별 사용자의 개인정보에 대해 소상하게 알고 있는 중앙관리자를 필요로 한다는 점입니다.

 

 

암호화 화폐 방식

비트코인 같은 분권형 네트워크에서 모든 개별 참가자가 이 일을 합니다. 이는 네트워크 내에서 일어난 모든 거래 내역을 기록해놓고 누구든지 접속이 가능한 공공 원장인 블록체인을 통해서 이뤄질 수 있습니다. 이에 따라 네트워크 내에 속한 누구든지 모든 사람들의 계좌 잔액을 볼 수 있는 것 입니다.

 

암호화폐 네트워크 내에서 채굴자(miner)들은 암호 퍼즐을 풀어야만 거래내역을 확인할 수 있습니다. 이들은 거래를 합법적인 것으로 표시하고 이를 네트워크 전반에 걸쳐 확산시킵니다. 그런 후에 네트워크 상의 모든 노드는 이를 데이터베이스에 추가시키는 것 입니다. 일단 거래가 확인되면 아무도 이를 위조하거나 번복하지 못하게 되고 채굴자는 보상금과 거래 수수료를 받게 됩니다.

 

어떠한 암호화폐 네트워크이든 잔액과 거래 내역의 합법성 확인은 모든 참여자들의 절대 합의 (absolute consensus)에 근거하고 있습니다. 네트워크 상의 일부 노드가 단 하나의 계좌 잔액에라도 이의를 제기한다면 이 시스템은 존립할 근거를 잃고 맙니다. 그러나 이러한 상황의 발생을 막기 위해 네트워크 내에 만들어진 수많은 규칙과 프로그램이 존재하긴 합니다.

 

암호화 화폐는 합의 유지 과정이 강력한 암호화 기술로 떠받쳐지기 때문에 그런 이름으로 불리는 것 입니다. 앞에 언급한 사항들과 함께 이는 제 3자의 존재와 무조건적인 신뢰를 전혀 필요로 하지 않게 만든다.

 

 

다음 글에서는 암호화 화폐가 법정화폐, 즉 실물화폐를 대체할 수 있는지에 대한 찬성편에서 이야기를 쓰겠습니다!

오늘 하루도 좋은 하루가 되면 좋겠습니다😊😊

문제후기

  1. 해당 문제는 1부터 시작해서 g와 h를 거친 이후 최종 목적지로 가는 것을 확인하는 문제로 다익스트라를 활용해야겠다고 생각을 했습니다. 시간초과를 피하기 위해서 우선순위 큐도 적용했습니다.
  2. 최종 목적지 후보로 도착하기 전에 g와 h 사이의 직선을 거쳐야하므로 1 -> g -> h -> 최종 or 1 -> h -> g -> 최종입니다.
  3. 처음 문제를 풀고 제출을 했을때 틀렸는데 문제에서 2번에서 가는 것이 1-> 최종보다 작야한다는 것을 파악하지 못했습니다.

문제링크

 

9370번: 미확인 도착지

(취익)B100 요원, 요란한 옷차림을 한 서커스 예술가 한 쌍이 한 도시의 거리들을 이동하고 있다. 너의 임무는 그들이 어디로 가고 있는지 알아내는 것이다. 우리가 알아낸 것은 그들이 s지점에서

www.acmicpc.net


from sys import stdin
import heapq

# 방문여부 확인용 초기값
INF = 1e9

# 다익스트라 알고리즘
def dijkstra(start, last):
    # 방문여부
    dp = [INF] * (n+1)
    # 시작 값 0부터 시작
    dp[start] = 0
    heap = []
    # 힙에 (거리값, 정점) push, 우선순위 큐
    heapq.heappush(heap, (dp[start], start))

    # 힙이 있을때까지
    while heap:
        
        weight, now = heapq.heappop(heap)
        for end, dis in node_dict[now]:
            # 조건을 만족하는 값 heap정렬
            if dp[end] > weight + dis:
                dp[end] = weight + dis
                heapq.heappush(heap, (dp[end], end))
    return dp[last]


T = int(stdin.readline())
for _ in range(T):
    n, m, t = map(int, stdin.readline().split())
    s, g, h = map(int, stdin.readline().split())


    # 노드 hash화
    node_dict = {}

    for _ in range(m):
        a, b, d = map(int, stdin.readline().split())
        node_dict[a] = node_dict.get(a,[]) + [(b,d)]
        node_dict[b] = node_dict.get(b, []) + [(a, d)]
    
    # 1번 시작 -> g -> h -> 최종
    # 2번 시작 -> h -> g -> 최종
    answer1, answer2 = 0, 0

    answer1 = dijkstra(s, g) + dijkstra(g, h)
    answer2 = dijkstra(s, h) + dijkstra(h, g)

    candidate = []
    minimum = INF
    for _ in range(t):
        node = int(stdin.readline())
        answer = min(answer1 + dijkstra(h, node), answer2 + dijkstra(g, node))
        chk_answer = dijkstra(s, node)

        if chk_answer >= answer:
            heapq.heappush(candidate, node)


    while candidate:
        print(heapq.heappop(candidate), end="")
        if candidate:
            print(" ", end="")
        else:
            print("")

'백준' 카테고리의 다른 글

[백준] 가장 긴 바이토닉 부분 수열 -Python  (0) 2021.01.18
[백준] RGB거리 -Python  (0) 2021.01.14
[백준] 욕심쟁이 판다 -Python  (0) 2021.01.12
[백준] 절대값 힙 -Python  (0) 2021.01.10
[백준] K번째 수 -Python  (0) 2021.01.08

먼저 어떤 문제가 나왔고 어떤 알고리즘을 사용했는지는 시험전에 서약을 통해서 공개할 수 없음을 말씀드립니다!

 

코테준비

이전에도 코딩테스트를 몇 번 봤고 재미로 꾸준하게 문제를 풀긴했지만 이번 시험준비는 작정하고 문제만 계속 풀었습니다. 물론 시험을 위한 것이지만 많은 재미가 있더라고요.ㅋㅋㅋㅋ

 

공부를 한 방식은 부스트캠프 시험이 프로그래머스를 통해서 본다고해서 프로그래머스 문제 위주로 풀었습니다. 설명회에서 일반 기업의 코딩테스트 난이도라고 하셨고 2레벨 수준이면 다 풀 수 있겠다고 생각했습니다.

결론적으로는 2레벨 수준으로 생각한 것은 대단한 착각이었지요...😅

 

코딩테스트 준비를 하면서 동시에 블로그도 시작했습니다!

단순하게 문제만 풀다가 다시 그 문제를 보니 까먹은 경우가 많더라고요. 잊지 않기 위해서 다음과 같은 규칙을 스스로 정하고 공부를 시작했습니다

 

 

  1. 스스로 문제 풀어보기 (단, 알고리즘 구현으로 1시간이 넘어간 경우. 전체 코드 구현까지 3시간이 넘어간 경우에는 모르는것으로 생각하고 찾아보기)
  2. 문제의 알고리즘을 전체적으로 다시 확인해보기(모르는 문제의 경우 해답을 알고 난 이후 다시 풀기)
  3. 코드에 주석처리를 통해 어디서 어떤 코드가 왜 쓰였는지 작성하기
  4. 마지막으로 블로그에 문제후기를 등록하여 어떤 방식으로 문제를 해결해나갔는지 작성

 

위와 같은 규칙을 지키기 힘들면서도 하나씩 해내가는게 재밌었습니다😁😁😁

 

공부한 알고리즘을 정리해보면 이정도입니다.

차후에 블로그에 알고리즘에 대한 설명도 작성해야겠네요. 점점 할 일이 많아지는 기분ㅋㅋㅋㅋ

  • 완전탐색
  • 이분탐색
  • heap 정렬
  • 그래프
  • DFS, BFS
  • DP
  • 그리디, 다익스트라, 크루스칼
  • 조합, 순열

코테후기

공부를 하면서 자만하던 저를 반성하고 다시 공부하게 만드는 시험이었습니다.....😅

막상 시험을 시작하니 많은 것들이 기억이 안나고 당황을 하더라고요. 전체적인 느낌은 정말 전형적인 기업 코딩테스트였던거 같아요. 교육이어서 쉽다는 생각을 하다가 멘탈이...ㅋㅋㅋ

그래도 다행히 정신차리고 풀긴 풀었네요

 

자만하지말고 더 열심히 공부를 시작하자!!

 

결과

결과는 다행히 합격입니다..... 정말 마지막 순간까지 긴장했어요ㅠㅠ 긴장하는 기분이 좋은 기분은 아니네요

그래도 11월 중순부터 시작해서 목표를 설정하고 혼자서 공부한 것에 대한 결과가 잘 나와서 너무너무 만족합니다!!

앞으로 진행되는 6개월동안 정말 영혼을 갈아서 넣으려고해요ㅋㅋㅋㅋ

같이 교육을 진행하는 모든 분들이 좋은 결과를 얻기를 바라겠습니다!!

문제후기

  1. 해당 조건(N은 10^5보다 작거나 같은 자연수이다. 둘째 줄에 k가 주어진다. k는 min(10^9, N^2)보다 작거나 같은 자연수이다)을 확인하고 완전탐색을 하게되면 시간초과가 발생할 것을 예상했습니다. 알고리즘은 이분탐색(logN)을 활용해야겠다고 생각하게 됐습니다
  2. 배열에 있는 값을 어떻게 하면 이분탐색으로 할 수 있을지 고민하는데 오래걸렸습니다. 같이 문제푸는 사람과 이야기를 하다가 몫과 나머지를 활용하면 어떻게 되지 않을까라는 말이 나와 몫을 활용하기 시작했습니다.
  3. 몫을 활용해서 해당 숫자가 정답을 만족하게 되는 경우 마지막값(end)을 땡기고 만족하지 않는 경우 시작값(start)을 미루는 방식으로 진행했습니다.

자세한 예시를 들어보면

문제에서 제시한 예시 3으로 보여드리겠습니다. 3을 2차배열로 만들게 되면 아래와 같아집니다.

1 2 3
2 4 6
3 6 9

 

위의 도표를 봤을때 찾는 방식은 행의 첫번째 값을 기준으로 나누는 것입니다. 중간값은 시작(1), 마지막(9)이므로 5입니다.

  1.  첫 번째 줄은 1번 값이 1. 그러므로 중간값을 1로 나누면 5//1 = 5이므로 N 3보다 크므로 5보다 작은값은 3개.
  2.  두 번째 줄은 1번 값이 2. 그러므로 중간값을 2로 나누면 5//2 = 2이므로 N 3보다 작으므로 5보다 작은값은 2개.
  3.  세 번째 줄은 1번 값이 3. 그러므로 중간값을 3로 나누면 5//3 = 1이므로 N 3보다 작으므로 5보다 작은값은 1개.
  4. 전체 총 6개가 5보다 작습니다.
  5. 시작값과 마지막값을 조정하면서 위의 과정을 반복해 K번째 값을 찾으면 됩니다.

문제링크

 

1300번: K번째 수

세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B

www.acmicpc.net


from sys import stdin

# Input 값
N = int(stdin.readline())
K = int(stdin.readline())

# 이분탐색 시작값과 마지막 값.
start, end = 1, N ** 2
answer = 0  # 정답값

# 이분탐색 실행.
while start <= end:
    middle = (start + end) // 2
    count = 0
    # 해당 값이 N이상으로 나눠지는지, N개인지, 그보다 적은지 판단
    # middle보다 작은 값 갯수 카운팅
    for i in range(1, N+1):
        count += min(middle//i, N)
    
    # 만약 갯수가 K보다 많거나 작으면 end값 땡겨서 범위 축소
    if count >= K:
        end = middle - 1
        answer = middle
    # 만약 갯수가 K보다 적으면 start값 땡겨서 범위 축소
    else:
        start = middle + 1
print(answer)
print(start)

'백준' 카테고리의 다른 글

[백준] 가장 긴 바이토닉 부분 수열 -Python  (0) 2021.01.18
[백준] RGB거리 -Python  (0) 2021.01.14
[백준] 욕심쟁이 판다 -Python  (0) 2021.01.12
[백준] 절대값 힙 -Python  (0) 2021.01.10
[백준] 미확인 도착지 -Python  (0) 2021.01.09

글을 시작하며...

11월 중순에 인스타와 페이스북 광고를 보고 준비한 과정이 21년이 되어서 끝이 났습니다...🤤

지원하게 된 동기부터 넋두리하듯이 어떻게 진행되는지 써보려고 해요. 물론 해당 시험에 대해서 직접적으로 언급하면 안 되기 때문에 느낌만 쓰는 글이 될 겁니다. 😊

지원동기

스타트업에서 자연어처리도 해보고 졸업작품, 공모전 작품에서는 자연어처리랑 추천시스템을 만들어보면서 많은 부분에서 막히더라고요. 이론적인 부분, 프로그래밍 부분 등 부족함을 해결하려 논문도 찾아보고 git에 들어가서 다른 분들이 한 프로젝트 참고도 해보고 페이스북 그룹에서 질문도 해봤네요. 하면 할수록 부족함이 보이고 더 많은 지식과 스킬이 필요함을 느끼다 AI Tech를 보고 지원하게 됐습니다!

잘할 수 있을지, 어려울지 재고 있는 거 보단 배우고 싶은 거 제대로 배울 수 있겠다 생각했습니다 ㅋㅋㅋ

BAT

설명회나 부스트캠프 홈페이지에서는 대략적으로 설명을 해주더라고요

일단 홈페이지에서는 아래와 같이 설명했어요. 더 자세하게 확인하고 싶은 분은 아래 링크에서 자세히 확인해보세요

 

부스트캠프

개발자의 지속 가능한 성장을 추구하는 학습 커뮤니티, 부스트캠프 AI Tech

boostcamp.connect.or.kr

  • 이진탐색트리, 정렬 수준의 자료 구조와 알고리즘 지식
  • 행렬 연산 수준의 선형대수 지식
  • 이산수학/미적분학/확률과 통계 지식
  • 초급 수준의 머신러닝 지식(유튜브 모두의딥러닝)

추가적으로 블로그에서 문제도 제공해줬어요!

 

자가 진단 테스트 문항을 공개합니다 :)

AI 엔지니어에게 필요한 지식과 경험을 담은 부스트캠프 AI Tech​훌륭한 동료들과 함께 하기에 본인...

blog.naver.com

 

진짜 후기로는 정말 지원자격에 있는 수준이었습니다.

몇 문제가 나왔는지, 어떤 문제가 나왔는지와 같은 자세한 정보는 제3자에게 공유하면 안 된다는 서약을 해서 제공할 수 없네요 ㅎㅎ..

신기했던 건 이제까지 프로그래머스에서 코테만 봤었는데 객관식 시험은 처음이라 '오? 이런 것도 있었네' 이거네요ㅋㅋ

 

수학 같은 경우는 학교에서 수업을 들었던 것들이라 집에 있는 책들 보면서 공식 정리하고 어떻게 했었는지만 다시 생각하는 정도였고 모두의 딥러닝을 열심히 봤어요. 시험보다는 머신러닝 딥러닝 공부한다는 느낌으로요.

 

다음 편에서는 코테 후기 남기려고 해 볼게요

+ Recent posts