더 골1 
엘리 골드렛, 제프 콕스 지음

 

 현재 공장의 재고가 쌓여가고 있고 매년 적자를 기록하고 있으며 주문을 제때제때 처리를 못하는 상황이다. 이런 상황에서 회사 본부에서는 3개월 이내에 수익을 내라고 지시하고 있으며 그렇지 못할 때에는 공장 폐쇄를 시키겠다는 통보를 내린다. 

 이런 상황에서 당신이라면 어떻게 할 것인가? 그저 3개월 동안 기존에 해왔던 관습에 따라 열심히만 일할 것인가? 이것은 해결책이 될 수 없고 좋은 방안이 될 수 없다. 현재까지 해왔던 방식이 문제라면 변화를 줘서라도 어떻게서든 이 난관을 헤쳐 나갈려고 노력할 것이다. 그러나 변화를 줘야겠다고 생각을 해도 어디가 문제인지도 모르고 어디서부터 손을 대야하는지 모른다면 참으로 막막할 것이다.

 '더 골1'의 내용을 간단하게 요약하자면 앞서 말한 상황에 놓여있는 알렉스 공장장에게 힌트를 주는 요나 교수가 있다. 요나 교수는 절대 답을 알려주지 않으며 알렉스 공장장이 스스로 이 난관을 헤쳐 나갈 수 있도록 꼬리 질문을 끊임없이 던진다. 그리고 알렉스 공장장은 이 기대에 부응하며 하나하나씩 문제점을 해결해나간다.

 여기서 내가 가장 인상깊었던 것은 바로 기업의 근본적인 목표는 무엇인가? 라는 점이다. 흔히 우리는 기업의 목표라고하면 거창하게 모두가 행복하게 옷을 입을 수 있는 세상, 환경을 생각하는 글로벌 테크 기업 등등 예를 들자면 이런 식으로 표현되어 있는 것을 많이 볼 수 있다. 허나 기업은 돈을 버는 것이 목적이다. 돈을 벌어서 시장에서 경쟁력 있는 기업이 되어 남들보다 한 걸음 앞서가기 위해 노력한다. 이 기저에는 돈이 있으며 돈이 없으면 기업은 살아남지 못한다.

 이 책에서는 돈이 필요한 기업이 어떻게 경영을 해야하는지 이야기로 풀어서 설명한다.

 예를 들면, 공장에서 재고가 남는 이유가 공정마다 처리하는 속도가 다른데 이 속도를 제어하기 위해서는 우리는 어떻게 해야할까? 가장 먼저 각 공정이 처리되는 시간을 계산할 것이다. 그 후에는 가장 빠른 공정은 제일 먼저하도록 하고 가장 느린 공정은 가장 나중에 하도록 한다. 이것은 정말 간단한 것이지만 우리가 문제라고 생각하지 않으면 문제라고 인식하지 못하고 그저 흘러넘기듯이 이 공장도 그렇게 운영되고 있던 것이다. 

 나는 사업의 총 책임자가 가져야할 덕목과 강단 그리고 운영능력을 이 책을 통해 배울 수 있었는데 창업이나 어떠한 조직의 리더가 되고 싶은 나로서는 너무 좋은 책이다. 더 어릴 때 읽지 않고 지금 읽어서 아쉬울 정도로 굉장히 좋은 책이기에 창업이나 경영에 관심 많은 분들은 이 책을 꼭 읽었으면 한다. 

 

+ 제가 느낀 점은 정말 많지만 필력이 안 좋아서 글이 중구난방일수도 있습니다. 하지만 정말 한번 읽고 너무 좋아서 두 번째로 읽고 있는 사람으로서 이 책을 강력히 추천합니다.

 

'독서 > 자기계발' 카테고리의 다른 글

빅데이터 커리어 가이드북  (0) 2024.01.19
GRIT - 열정적 끈기의 정의  (0) 2024.01.19

AI 이후의 세계

저자: 헨리 키신저, 에릭 슈밋, 대니얼 허튼로커

어느 한 유튜버(에스오디 과학 유튜버)의 영상을 보고 충격을 받을 수 밖에 없었다.

AI가 우리의 생각을 전기적 신호를 통해 읽고 무슨 말을 할 지 예측하는 시대가 도래했다니.. 불과 몇 년 전만 해도 우리는 알파고가 이세돌 9단과 대결을 해서 이긴 것을 보았다. 그리고 우리는 다가오는 AI 시대를 대비하여 무엇을 준비했는가? 당장 나로서 생각을 하면 아무 것도 준비하지 않았다. 그냥 주어진 공부에 순응하며 하루하루를 지내왔다. 분명 내가 이러는 순간에도 기술을 정말 빠른 속도로 발전하고 있었을 것이다.

그것을 증빙이라도 하듯 지난 해 11월 Chat GPT가 출시되면서 세상을 놀라게 했다. 조금 무서워지기 시작했다. 미래에 AI는 지금보다 훨씬 우리의 생활에 들어와있을텐데 그 때의 삶과 지금의 삶은 얼마나 달라져있을까? AI가 상용화된 미래에서는 내가 할 수 있는 건 무엇일까? 이러한 나의 질문과 다른 사람들이 가지고 있는 AI의 걱정에 대해 정치계, 기업계, 학계의 세 전문가가 쓴 책이 바로 'AI 이후의 세계'이다.

이 책은 AI 시대를 맞이하게 되었을 때 AI를 규제하는 정책이 수립되려고 하면 이미 늦은 거라고 말하며 정치적으로, 경제적으로, 학문적으로 어떤 식의 물음을 해결할 지 고민하고 있다. 현재 일론 머스크나 유발 하라리와 같은 권위 있는 사람들이 공동 성명을 하며 AI의 개발 속도를 조금 낮추자고 하는 것도 이해가 된다. (물론 일론 머스크는 그러면서 AI 스타트업을 차리기도 했다...)

우리는 알게 모르게 AI의 영향을 받으며 살아가고 있다. 페이스북, 인스타그램, 틱톡, 유튜브와 같은 글로벌 네트워크 플랫폼에서 AI가 고객의 개인정보와 이전에 오랫동안 본 컨텐츠를 바탕으로 고객이 좋아할만한 정보를 제공하고 있다.

AI가 이용자의 취향과 목적을 고려한 정보들을 제시하면서 허위 사실이 유포되거나 이상한 사상이 전파되어 사회가 혼란스러워질 수도 있다. 그것도 일시적인 것이 아니라 AI 기반 네트워크 플랫폼을 매일 들어가면서 지속적으로 그러한 정보들이 전파될 수 있다. 그렇다면 이것을 막기 위해서는 AI 엔지니어들이 AI가 허위 사실이나 불온한 사상들은 검열할 수 있도록 설정해야한다. 그럴려면 AI가 그런 결과를 도출하는 과정을 엔지니어가 잘 알고 있어야 할 것이다.

그런데 여기서 이상한 점은 AI 기반의 네트워크 플랫폼이 왜 그러한 결과를 도출했는지는 엔지니어들도 확실하게 설명하지는 못한다는 것이다. 예를 들자면 아무리 구글의 엔지니어라고 해도 AI 기반 검색의 결과가 AI를 이용하지 않았을 때보다 좋다는 사실만 알 뿐, 어째서 특정한 웹페이지가 다른 웹페이지보다 순위가 높게 나왔는지 반드시 설명해내진 못한다. 통상적으로 AI를 평가할 떄는 결과물을 도출하는 과정이 아니라 결과물의 유용성만을 기준으로 삼는다.(148p) 여기에서 이 책은 몇 가지 의문점을 제사한다. '어떤 사람도 AI가 취급하는 데이터를 완전히 이해하거나 열람할 수 없다면, 우리는 위안과 불안 중 무엇을 느껴야 하는가?', '그런 AI를 누가 운용하고, 한계는 누가 정하는가?'(149p)

AI 시대가 도래하면 인간의 정체성도 위협을 받을 것이다. AGI, 범용 인공지능은 AI를 연구하는 사람들의 꿈이라고 할 수 있다. AGI는 특정한 작업을 학습하고 수행하는 데 그치지 않고 다방면에서 인간이 하는 것과 비슷한 작업을 학습하고 수행하는 AI다. 물론 AGI의 등장은 강한 컴퓨터 성능과 막대한 재원이 들어가기 때문에 소수의 글로벌 대기업들이 이 작업을 수행할 수 있을 것이다.(258p) 이와 같이 AI가 발전함에 따라 그 동안 인간이 개인과 집단의 전유물로 여겨졌던 복잡한 결과를 만들어내는 능력 (222p)이 더 이상 인간의 것만은 아니게 된다. 자연스럽게 기존의 직업들 중 AI가 쉽게 대체할 수 있는 직업은 사라지게 될 것이다. 지난 역사에서 그랬던 것 처럼. 그렇다면 어떻게 해야 하는가? 이 책은 역사를 보고 배워야 한다고 주장한다. 과거에 방직기가 발명되어 노동자를 대체하자 신기술의 사용을 저지하고 기존의 방식을 고수하고자 햇지만, 이런 시도가 실패하자 신기술을 파괴하려고 했던 러다이트 운동이 일어났다. 농업이 산업화되자 농촌 인구가 대거 도시로 이주했다. 세계화로 생산, 공급사슬이 달라지자 많은 사회가 변화와 소요를 겪은 후에야 전반적 발전을 이룩했다.(228p) 이처럼 AI가 상용화된 사회에서 인간들은 AI를 제한하거나, AI와 협력하거나, AI를 따르는 길 중 하나를 선택할 것이다. (256p) 역사는 반복된다. AI가 불러올 막대한 영향력에 대해 정부, 기업, 학계에서 심도깊은 대화를 나눌 필요가 있다.

사람들은 자신의 일이 아니라고 생각이 들면 그 일에 대해 관심 조차 주지 않을 때가 많다. 그러나 AI는 남의 일이 아니다. 분명히 기술은 계속해서 발전하고 있으며 그 과정에서 생기는 변화들에 대해 우리는 반응을 해야한다. 이 책은 일상 속의 시민들, 학생들, 기업, 정부가 AI 와 함께 살아가기 위해 고민해야 할 질문을 묵직하게 던지고 있다. AI와 관련된 모든 분들께 이 책을 추천하고 이 책을 통해 더 나은 미래를 살아갈 수 있는 독자들이 되기를 원한다.

-------------------------------------------------------------------------------------------------------------------------------

기억에 남는 구절 또는 문장, 정리하고 싶은 내용

튜링 테스트, 만일 어떤 기계가 관찰자의 눈에 인간의 행동과 분간되지 않을 만큼 능숙하게 행동한다면 지능이 있다고 간주하자는 '모방 게임'

흔히들 튜링 테스트를 문자 그대로 해석해 인간과 분간이 안 되는 로봇만이 그 기준을 충족한다고 착각한다. 하지만 튜링 테스트는 모든 면에서 인간과 구별이 안되는 기계를 상정하는 것이 아니라, 어떤 기계가 특정한 영역에서 인간과 '유사하게' 행동하는지 평가하는 수단이다. 이때 중요하게 보는 부분은 프로세스가 아니라 수행 능력이다.('AI 이후의 세계' 94-95p) 이러한 정황을 볼 때 chat GPT 는 언어 영역에서 튜링 테스트를 통과했다고 볼 수 있다.

지금까지 전통적인 프로그램들은 방대한 데이터를 정리하고 복잡한 연산을 수행했지만, 단순한 사물의 이미지를 인식하거나 비정밀한 입력을 처리하지는 못했다. 반면에 인간은 비정밀하고 개념적인 사고를 하기 때문에 AI의 발전이 정체될 수 밖에 없었다. 하지만 AI는 기술 발전을 토대로 비정밀하고 역동적이고, 창발적이며 , '학습'이 가능해졌다. 이런 기술의 근간은 머신러닝이다.

정밀하고 예측 가능한 고전적 알고리즘에 비해 머신러닝 알고리즘은 비정밀한 결과를 도출하고 예측 불가능한 결과를 낸다.

주목할 만한 3대 머신러닝은 지도학습, 비지도학습, 강화학습인데,

지도학습

사용된 데이터 세트 내의 입력들에 바람직한 출력 혹은 결과를 나타내는 레이블 붙어 새로운 입력에 관한 출력을 예측하는 모델을 만들 때 사용

ex) 할리신을 발견한 AI

비지도학습

데이터에 레이블이 없을 때 입력만 포함한 훈련 데이터를 통해 유의미한 패턴을 찾아내는 것

지도학습과 비지도학습은 주로 AI가 데이터를 토대로 추세를 발견하고 이미지를 식별하고 예측을 도출하는 작업을 수행하게 훈련하는 기법

강화학습

AI가 통제된 환경에서 '주체'가 되어 제 행동에 대한 반응을 관찰하고 기록. 그리고 AI의 행동이 얼마나 성공적이었는지 피드백을 제공하는 보상함수를 자동화하고 그 함수가 작동하는 방식과 시뮬레이터가 현실을 모사하는 방식을 정밀하게 설정. 그리하여 AI가 그것을 토대로 스스로 훈련하는 기법.

생성형 AI를 만들 때 주로 사용되는 훈련 기법은 상호 보완적인 학습 목적을 가진 두 신경망을 경쟁시키는 것. 일명 생성형 적대 신경망이라고도 함. (GAN, Generative Adversarial Networks)

잠재적 출력을 생성하는 생성망과 조악한 출력의 생성을 막는 판별망으로 구성되는데 비유를 하자면 생성망은 브레인스토밍을 하고, 판별망은 유의미하며 현실적인 아이디어를 선별한다.

GPT-3 같은 트랜스포머는 텍스트처럼 순차적으로 나열된 요소에서 패턴을 포착해 다음에 올 확률이 높은 요소를 예측하고 생성한다.

자율 시스템은 인간이 수동으로 관리하는 '온 더 루프' 시스템과 특별한 행동에만 인간의 승인이 요구되는 '인 더 루프' 시스템으로 나뉜다

'독서 > 과학' 카테고리의 다른 글

K반도체 대전략  (1) 2024.07.08
카이스트 미래전략 2024  (3) 2024.02.20

빅데이터 커리어 가이드북

조성준, 김현용 박서영, 안용대, 임성연 지음

우리는 데이터가 넘치는 시대에 살고 있다.

데이터라고 해서 엄청 거창한 것을 말하는 것이 아니라 내가 유튜브에 들어가서 어느 종류의 동영상을 보는지, 백화점에서 어떤 물건을 주로 구입하는지, 평소 길을 걸을 때 어떤 음악을 듣는지 등과 같이 온라인 상에서 내가 활동을 했을 때 기록에 남는 모든 것들이 데이터이다.

그래서 우리는 이러한 데이터를 통해 무엇을 할 수 있느냐? 미래를 예측할 수 있다는 것이다.

예를 들면, 미국의 어느 가정의 아버지가 쇼핑몰에 전화를 해서 무척 화를 냈다. 그 이유는 쇼핑몰에서 그 가정의 딸에게 임산부가 되면 필요한 것들을 추천해서 보냈기 때문이다. 딸은 아직 미성년자였고 왜 이런 걸 보냈냐며 아버지는 쇼핑몰에게 화를 내고 끊었다. 하지만 이후 다시 쇼핑몰에게 아버지의 전화가 걸려오는데 알고보니 딸이 아이를 임신했었고 자신이 몰랐다며 화를 낸 것에 대해 사과를 했다. 그렇다면 여기서 쇼핑몰은 도대체 어떻게 아버지도 몰랐던 딸의 임신 소식을 알 수 있었을까? 바로 데이터이다. 쇼핑몰에서 딸이 어떤 상품을 주로 보는지 분석해 본 결과를 바탕으로 딸의 임신 소식을 예측한 것이다.

난 이 사례가 데이터의 힘을 보여준다고 생각한다.

이와 같이 데이터를 잘 활용하면 소비자나 고객들이 무엇을 원하는지 금방 알아차릴 수 있으며, 미래가 어떤 식으로 펼쳐질 지 예측할 수가 있다. 물론 이렇게 과거의 데이터를 맹목적으로 맹신해서는 안된다. 어디까지나 예측이기 때문에 틀릴 수가 있다. 하지만 불확실한 현대 사회에서 데이터를 바탕으로 미래를 예측하는 것은 가장 합리적인 방법이라고 생각한다.

이 책은 빅데이터와 데이터 관련 직무에 관심이 많은 학생들이나 빅데이터를 실제로 사용하고 있는 기업의 데이터 팀에게도 추천하고 싶다.

-------------------------------------------------------------------------------------------------------------------------------

기억하고 싶은 문장들

'빅데이터 실행'은 '데이터에서 인사이트를 도출함으로써 가치를 창출해내는 과정'(33p)

미래기업의 경쟁력은 각 기업이 얼마나 많은 양질의 데이터를 보유하고 있느냐에 달려 있습니다. (39p)

'독서 > 자기계발' 카테고리의 다른 글

더 골1 - 당신의 목표는 무엇인가?  (0) 2024.01.19
GRIT - 열정적 끈기의 정의  (0) 2024.01.19

GRIT

앤절라 더크워스

자신이 원하는 일을 하면서 재밌게 그리고 돈도 많이 버는 사람이 이 세상에 과연 몇이나 될까?

나 또한 이번 창업 프로젝트를 하면서 내가 추구하고자 하는 방향과 프로젝트 팀에서 추구하고자 하는 방향이 달라서 근 한 달 동안 프로젝트를 관둘지 말지 고민을 굉장히 많이 한 것 같다. (결국 그만뒀긴 했다.)

어쨌든 나는 이 고민을 하는 동안 '내가 이렇게 끝까지 하는 능력이 안되는 사람이었나?' 라는 생각도 수시로 했다. 이 생각이 나를 조금 힘들게 만들었다.

왜냐하면 끝까지 무언가를 못하는 사람은 끈기가 없고 끈기가 없는 사람은 크게 성공하지 못할 것 같은 나의 가치관 때문이었다.

평소 '읽어야지, 읽어야지' 하고 읽지 않았던 GRIT이라는 책을 이 시기에 읽게 되었다.

'프로젝트를 그만둬야겠다.' 라는 생각을 확고히 하게 된 것은 이 책의 영향이 컸다. 책에 있는 한 챕터의 내용이 지금 나의 상황을 대변하는 것 같았다. 그 내용은 지금 현재 위대한 운동 선수들, 권위 있는 위치에 있는 교수, 사업가들 모두 자신이 원하는 일을 찾기까지 많은 시간이 걸렸다고. 한 예를 들자면 제프 베이조스, 아마존의 창업자는 물리학을 좋아하여 물리학 쪽에서 일을 하려고 대학도 물리 쪽의 전공을 선택해서 진학하였는데 베이조스는 하나의 물리 문제가 도저히 풀리지 않아서 친구에게 다가가 어떻게 이 문제를 접근하는건지 물었는데 암산으로 5분 만에 푸는 것을 보고 충격을 먹었다. 그러고는 충격을 먹고 자신의 길이 아닌 것 같다 싶어서 물리학 쪽으로의 커리어를 쌓기 보다는 창업을 하였고 지금 현재의 아마존이 되었다. (정확한 내용은 아니라서 궁금하면 제프 베이조스의 일화를 검색하기를 바란다.) 어쨌든 이것처럼 자신이 좋아하는 일을 찾는 것도 굉장히 힘든 일이다,

그런데 그렇다고 해서 빨리 그만두고 다른 일 찾고 이렇게 하는 것을 좋다고 할 수는 없다. 이 책에서는 최소한의 기간을 제시한다. 내가 이 책을 통해 받아들이기로는 한 4~5개월 정도 해보고 안 된다 싶으면 다른 길을 찾는 것을 추천하는 것 같았다. 그러니깐 어느 정도의 지식을 쌓고 그 이후로 자신의 관심도를 파악하고 선택하라는 것이다.

그래서 나 같은 경우는 6개웛 동안 창업 프로젝트 활동을 진행했고 나의 길과 안 맞다는 것을 확인했기에 그만두는 선택을 했다고 말할 수 있다.

이 책을 읽으면서 어떤 것이 열정인지를 알 수 있게 되었다. 사람들은 흔히 어떤 사람이 어떤 것을 열심히 하거나 공부하면 '와, 저 사람 정말 열정적이네.'라고 할 것이다. 하지만, 여기서 가장 중요한 것은 그 어떤 것을 얼마나 지속적으로 열심히 하느냐가 중요하며 지속적이지 않고 단기적인 불타오름은 열정이 아니라 설렘이다. 기간을 기준으로 구체적으로 열정과 설렘의 차이를 말하자면 열정은 몇 년 동안이나 자신의 일이나 공부를 지속할 수 있는 끈기이고 설렘은 3~4개월 안에 식어버리는 단기적인 불타오름이라고 할 수 있다.

그래서 나는 이 책을 읽으며 결심했다. 3~4년 동안 공부하고 지속할 수 있는 일을 찾겠다고. 지금 대학생 신분으로서 나에게 가장 잘 맞는 일을 찾는 방법은 다양한 활동을 하는 것이다. 이것저것 책도 읽어보고 하면서 견문을 넓히며 내가 가장 흥미로워하는 일을 찾는 게 1~2년 안의 목표이다.

이 책은 열정적 끈기가 어떤 것이며 이것을 갖기 위해 일반인들이 어떻게 하면 좋으며 자식이 있는 부모에게 GRIT을 자식들이 가질 수 있도록 하려면 어떻게 해야 하는지 알려주고 있다. 이 책은 자신이 현재 잘하고 있는지 의문이 드는 사람들과 자식들이 무언가 열정적으로 하는 어떤 것이 있었으면 하는 바람을 가지고 있는 부모들에게 추천한다.

기억에 남는 구절

29p 첫째, 그들은 대단히 회복력이 강하고 근면했다. 둘째, 자신이 원하는 바가 무엇인지 깊이 이해하고 있었다. 그들은 결단력이 있을 뿐 아니라 나아갈 방향도 알고 있었다.

67p 성취 = 재능 X 노력^2

79p "일단 출석만 하면 8할은 성공이다."

225p "지금으로부터 15년 후의 당신을 상상해보세요. 그때 당신에게 가장 중요한 일은 무엇입니까?""당신에게 더 나은 사람이 되어야겠다는 자극을 줬던 사람이 있습니까? 그런 삶을 보여준 사람은 누구입니까? 그가 자극이 된 이유는 무엇입니까?"

274p 부모는 먼저 아이에게 '네가 내 말대로 행동하게 하려는 것도, 너를 통제하거나 나처럼 만들려는 것도, 내가 했던 대로 하는 것도, 내가 못한 일을 대신 해달라는 것도 아니다.' 라는 것을 확실히 증명해 보여야 합니다.

>> 이 말은 내가 유년기와 청소년기를 보내며 부모님께서 해주었으면 하는 행동이였던 것 같아서 읽으면서 울컥했던 것 같다.

+ 자신에게 GRIT (열정적 끈기) 이 있는지 확인하는 자가 진단 체크 리스트이다. 자신의 결과를 보고 내가 이 GRIT의 내용을 발표하려고 만든 ppt에 자신의 GRIT은 상위 몇 %인지 확인하도록 했으니 확인하면 더 좋을 것 같다.

 

'독서 > 자기계발' 카테고리의 다른 글

더 골1 - 당신의 목표는 무엇인가?  (0) 2024.01.19
빅데이터 커리어 가이드북  (0) 2024.01.19

문제

<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.

예를 들어, 다음과 같이 81개의 수가 주어지면

 1열2열3열4열5열6열7열8열9열1행2행3행4행5행6행7행8행9행
3 23 85 34 17 74 25 52 65
10 7 39 42 88 52 14 72 63
87 42 18 78 53 45 18 84 53
34 28 64 85 12 16 75 36 55
21 77 45 35 28 75 90 76 1
25 87 65 15 28 11 37 28 74
65 27 75 41 7 89 78 64 39
47 47 70 45 23 65 3 41 44
87 13 82 38 31 12 29 29 80

이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.

입력

첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.

출력

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.

 

 

 

이 문제 솔직히 행렬적으로 안 풀어도 된다고 생각해서 

large_dict = {}

for i in range(1,10):
    num_list = list(map(int, input().split(" ")))
    value = max(num_list)
    key = num_list.index(value)
    large_dict[key] = value

rev_large_dict = dict(map(reversed, large_dict.items()))
l = list(rev_large_dict.keys())
print(max(l))
print(l.index(max(l))+1,rev_large_dict[max(rev_large_dict)]+1)

 

 이렇게 이중반복문 안쓰고 풀었다가 틀렸다.

근데 이렇게해도 출력값이랑 같게 나오는데..

아마 문제에서 요구하는 이중반복문을 쓰지 않아서 틀린 것 같다.

(혹시 아시는 분 있다면 알려주시면 감사드리겠습니다!)

 

그래서 정답은 이것이다. 

all_list = []

for i in range(9):
    num_list = list(map(int, input().split()))
    all_list.append(num_list)

result = all_list[0][0]
row = 0
column = 0
for x in range(9):
    for y in range(9):
        if all_list[x][y] > result:
            result = all_list[x][y]
            row = x
            column = y
            
print(result)
print(row+1, column+1)

 

처음에 제일 마지막 코드를 print(x, y)로 했는데

8,8 이렇게 나와서 당황했는데 

이렇게 나오는 게 당연한게 반복문을 다 돌은 값을 내가 출력했기 때문에 저렇게 나오는게 당연했다.

 

그래서 처음에 row = 0 / column = 0이라고 설정해놓고 최댓값이 나오면 그것의 행과 열의 번호를 기억하도록 시켰다.

그러니 정답이였다. 

 

행렬은 무조건은 아니지만 이중반복문을 권장해서 쓰도록 하자 흠흠 

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 2563  (0) 2024.01.24
백준 파이썬 - 10798  (0) 2024.01.19
백준 파이썬 - 2738  (2) 2024.01.18
백준 파이썬 - 25206  (0) 2024.01.18
백준 파이썬 - 1316  (0) 2024.01.18

문제

N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오.

입력

첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다.

출력

첫째 줄부터 N개의 줄에 행렬 A와 B를 더한 행렬을 출력한다. 행렬의 각 원소는 공백으로 구분한다.

 

n, m = map(int, input().split())
first_matrix = []
second_matrix = []

for i in range(n):
    f = list(map(int, input().split()))
    first_matrix.append(f)
    
for i in range(n):
    s = list(map(int, input().split()))
    second_matrix.append(s)

for i in range(n):
    for j in range(m):
        result = first_matrix[i][j] + second_matrix[i][j]
        print(result, end = " ")
    print()

 

이중으로 리스트 돼있는 것은 [ ] [ ] 이렇게 접근을 해야하는데

이걸 까먹어서 조금 헤맸던 문제였다.

그렇게 어려운 문제는 아닌 것 같다.

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 10798  (0) 2024.01.19
백준 파이썬 - 2566  (0) 2024.01.19
백준 파이썬 - 25206  (0) 2024.01.18
백준 파이썬 - 1316  (0) 2024.01.18
백준 파이썬 - 1157  (2) 2024.01.18

문제

인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다!

치훈이의 전공평점을 계산해주는 프로그램을 작성해보자.

전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다.

인하대학교 컴퓨터공학과의 등급에 따른 과목평점은 다음 표와 같다.

A+ 4.5
A0 4.0
B+ 3.5
B0 3.0
C+ 2.5
C0 2.0
D+ 1.5
D0 1.0
F 0.0

P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외해야 한다.

과연 치훈이는 무사히 졸업할 수 있을까?

입력

20줄에 걸쳐 치훈이가 수강한 전공과목의 과목명, 학점, 등급이 공백으로 구분되어 주어진다.

출력

치훈이의 전공평점을 출력한다.

정답과의 절대오차 또는 상대오차가 10−4 이하이면 정답으로 인정한다.

제한

  • 1 ≤ 과목명의 길이 ≤ 50
  • 과목명은 알파벳 대소문자 또는 숫자로만 이루어져 있으며, 띄어쓰기 없이 주어진다. 입력으로 주어지는 모든 과목명은 서로 다르다.
  • 학점은 1.0,2.0,3.0,4.0중 하나이다.
  • 등급은 A+,A0,B+,B0,C+,C0,D+,D0,F,P중 하나이다.
  • 적어도 한 과목은 등급이 P가 아님이 보장된다.
score_dict = {"A+":4.5,
             "A0":4.0,
             "B+":3.5,
             "B0":3.0,
             "C+":2.5,
             "C0":2.0,
             "D+":1.5,
             "D0":1.0,
             "F":0.0}
total = 0
grade_total = 0

for my_score in range(20):
    subject, point, grade = input().split(" ")

    if grade != "P":
        grade_point = float(point)*score_dict[grade]
        grade_total += float(point)
        total += grade_point
print(total/grade_total)

 

입력하는 것이 공백으로 띄워져있다는 것을 발견했다면 의외로 쉬운 문제였던 것 같다. 

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 2566  (0) 2024.01.19
백준 파이썬 - 2738  (2) 2024.01.18
백준 파이썬 - 1316  (0) 2024.01.18
백준 파이썬 - 1157  (2) 2024.01.18
백준 파이썬 - 11718  (0) 2024.01.16

문제

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.

단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다.

출력

첫째 줄에 그룹 단어의 개수를 출력한다.

 

n = int(input())
x_list = []
cnt_list = []

for i in range(n):
    word = input()
    word_list = list(word)
    for j in range(len(word_list)):
        if j == (len(word_list)-1):
            break
        if word_list[j] == word_list[j+1]:
            target = word_list[j]
        else:
            target = word_list[j]
            if target in word_list[j+1::]:
                x_list.append(word)
                break
            else:
                pass
    cnt_list.append(word)
print(cnt_list)
print(x_list)
for x in x_list:
    if x in cnt_list:
        cnt_list.remove(x)

print(len(cnt_list))

 

이 문제는 솔직히 처음에 봤을 때 어떻게 같은 것끼리 모으고 중복하지 않는 걸 찾아내지..라는 생각이 앞섰다.

그래서 일단 무작정 문자열을 나눠서 쪼개는 것만 생각했다.

그렇게하면 뭔가 실마리가 보이지 않을까라는 생각이었다.

그래서 곰곰이 생각해보니 반복문으로 같은 것이 뒤에 나오면 break를 걸어주고 그에 해당하는 단어를 x_list에 넣어주면 어떨까라는 생각을 하였다.

 

그렇게 해주고 나중에 원래 리스트에서 x_list를 빼주고 난 다음에 그 리스트의 길이를 출력해주면 되지 않을까라는 생각이었는데 성공이었다. 근데 코드가 너무 길어서 다른 사람들은 어떻게 했는지 구경했다. 

 

N = int(input())
res = 0

for i in range(N):
    word = str(input())

    for i in range(len(word) - 1):
        if word[i] != word[i+1]:
            if word[i] in word[i+1:]:
                res += 1
                break
print(N - res)

 

나랑 생각이 비슷한 사람은 이렇게 코드를 만들었다.

5번째줄까지는 비슷한데 

그 이후부터는 다르다.

len(word)-1 을 통해서 마지막에 숫자가 포함되지 않는걸 피해주고

word[i]와 word[i+1]이 같지 않으면 word[i] 이후의 문자열이 word[i]를 포함하는지 확인하고

포함한다면 res를 더해주는 형식이다.

그리고 마지막에 입력해준 문자열의 개수에서 res를 빼주어 답을 출력한다.

 

생각이 유연해야할 것 같다.. 하하

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 2738  (2) 2024.01.18
백준 파이썬 - 25206  (0) 2024.01.18
백준 파이썬 - 1157  (2) 2024.01.18
백준 파이썬 - 11718  (0) 2024.01.16
백준 파이썬 - 1152  (0) 2024.01.16

문제

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

입력

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

출력

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

 

s = input().upper()
s_list = list(set(s)) # 중복없는 리스트 만들어주기

cnt_list = []  # 합계 목록

for x in s_list:
    cnt = s.count(x)
    cnt_list.append(cnt)

if cnt_list.count(max(cnt_list)) > 1:
    print("?")
else:
    print(s_list[cnt_list.index(max(cnt_list))])

 

처음에 합계 목록까지 만들어줘야한다는 생각을 하고 어떻게 그럼 각각의 문자의 개수를 세지라고 생각을 했다. 

그래서 이중반복문으로 해줬는데 코드도 길어지고 헷갈려서 그만뒀다.

도저히 안되겠다 싶어서 구글링하니 count()를 통해 리스트의 요소들의 개수를 셀 수 있다는 걸 알게되었다.

나도 알고 있었는데 잘 사용하지 않아서 까먹었는데 이제라도 알았으니 앞으로 안 잊어야겠다.

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 25206  (0) 2024.01.18
백준 파이썬 - 1316  (0) 2024.01.18
백준 파이썬 - 11718  (0) 2024.01.16
백준 파이썬 - 1152  (0) 2024.01.16
백준 파이썬 - 2675  (0) 2024.01.16

문제

입력 받은 대로 출력하는 프로그램을 작성하시오.

입력

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.

출력

입력받은 그대로 출력한다.

예제 입력 1 

Hello
Baekjoon
Online Judge

예제 출력 1 

Hello
Baekjoon
Online Judge

 

 

그대로 출력하면 된다고해서 단순히

print(input())

 

했는데 틀렸다.ㅋㅋㅋ

지금 생각해도 웃기네

이 한 줄 코드로 끝낼거면 문제를 안 냈을 거 같다는 생각에 다시 문제를 봤다.

보니깐 여기서는 우리가 몇 번 입력할 지에 대한 얘기가 전혀없었다. 

그래서 어떻게 하면 되지.. 라는 생각에 구글링을 통해 찾아보니

while True:
    try:
        print(input())
    except EOFError:
        break

 

이렇게 하면 된다고 한다.

보고 바로 이해했는데

이게 while True로 얼마든지 입력을 받을 수 있게 하고

try except 구문을 통해 언제 멈출지 정해줄거다.

그런데 여기서 만약에 사용자의 입력이 멈추면 이 반복문도 그만해야하기에

EOFError(End of file error)를 걸어준다.

 

이게 정답이라고 한다.

다른 코드도 있는데

 

import sys

words = sys.stdin.readlines()
for word in words:
	print(word.rstrip())

 

이게 더 효율적이라고 한다.

반복문으로 여러 줄 입력을 받는 상황에서는 반드시 sys.stdin.readline()을 사용해야 시간초과가 생기지 않는다고 한다.

sys.stdin.readline() 사용법은 따로 다시 공부해서 올려야겠다.

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 1316  (0) 2024.01.18
백준 파이썬 - 1157  (2) 2024.01.18
백준 파이썬 - 1152  (0) 2024.01.16
백준 파이썬 - 2675  (0) 2024.01.16
백준 파이썬 - 10809  (0) 2024.01.15

+ Recent posts