본문 바로가기

알고리즘

[Python3] 버스 여행 버스정류장 N개가 있습니다. 정류장에는 1번부터 N번까지의 번호가 매겨져 있습니다.2차원 배열에서 A번 정류장에서 B번 정류장으로 가는 버스가 있다면 O, 없다면 X로 표시합니다.예를들어 3개의 버스정류장이 있을 때 X O X X X O O X X 와 같이 표시하면1번 정류장에서 2번정류장으로 갈 수 있음(첫 번째 줄의 O)2번 정류장에서 3번정류장으로 갈 수 있음(두 번째 줄의 O)3번 정류장에서 1번정류장으로 갈 수 있음(세 번째 줄의 O)이 표를 이용해서 버스를 계속 갈아타서라도 갈 수 있는 정류장을 모두 표시하는 2차원 배열을 리턴하세요.위의 표와 같이 1번에서 2번 정류장으로, 그리고 2번에서 3번 정류장으로 가는 버스가 있다면, 한 번 갈아타면 1번에서 3번 정류장으로 갈 수 있다는 뜻이 됩니.. 더보기
[Python3] 소수이면서 각각의 자리가 소수인 수 각 자리가 소수이면서 전체적으로 소수인 수를 구하라 말 그대로 소수이면서 각 자리 또한 소수인 수를 구하는 것이다.n = int(input()) num = list(range(1, n + 1)) prime = [] for i in range(1, n + 1): if(i == 1 or num[i - 1] == 0): continue prime.append(i) for j in range(i * 2 - 1, n, i): num[j] = 0 double_prime = [] for i in prime: check = True for k in list(str(i)): if(k not in ['2', '3', '5', '7']): check = False break if(check): double_prime.app.. 더보기
남은 숫자 99개의 값을 저장할수 있는 배열 k[0], k[1], k[2], ... , k[98] 이 있다.1부터 100까지의 값이 들어 있는 집합 {1, 2, 3, ..., 100}에서 무작위로 수를 꺼내어 배열에 저장했다.집합에 들어 있는 원소의 수는 100개인 반면, 배열은 값을 99개까지만 저장할 수 있으므로 집합 안에 하나의 숫자가 남았다.남은 것이 어느 수인지 확인할 수 있는 방법은? 조금 오래된 문제이긴 하다. 하나하나 모두 해보는 방법으로 배열안에 숫자를 모두 확인하는 방법이 있지만, 컴퓨터에게 그리 적절한 방법은 아닌 듯 하다. 그리 어렵지 않으니 조금만 생각하면 답을 찾을 수 있을 것이다. 우선, 1부터 100까지의 합은 (1+100)*50으로 5050이다.한편, 배열에 모두 저장되고 숫자가 한개.. 더보기
정보올림피아드 정보 올림피아드를 응시하러 경민IT고등학교 까지 갔다왔다. 사실, 처음 정보올림피아드를 보는것이라, 문제가 어떤식으로 출제될지 감이 잡혀있지도 않았다. 또, 나와 같은 교실에서 시험을 치는 학생들이 정보올림피아드 문제집을 풀고있길래 '와 저런것도 있단말이야??'라면서 대단하기도 하고 조금 위축된 느낌을 받았다. 문제는 컴퓨팅 사고와 실제 프로그램을 가지고 결과가 어떻게 되는지 추론하는 문제들이 나왔는데, 진짜 어려웠다. 내심 풀면서 말도안돼 이걸 풀라고? 싶었지만 꽤 생각해볼만한 재밌는 문제들도 많았다. 퇴실시간이라는 것이 존재하여 기존 시험시간보다 일찍 나올수 있었지만, 좀더 풀어보고 싶어서 끝까지 남았다. 물론 고사장에 남아있는 인원은 절반채 되지 않았다. 하지만, 시험이 끝나고 나왔을 때 학생들이 .. 더보기
[Python3] 단어 순서 바꾸기 글이 입력 되었을 때 마침표를 기준으로 문장을 나누고, 나눠진 문장에서 단어 순서를 바꿔라 [원작 - 팀 왈도] 순서를 점이 저번이랑 프로그램은 다르다 비슷하나 이번 문장에 단어 바꾼다는. 종족(?)에서 곳에서 단어 바꿔 영감을 말하는 순서를 제작했다 소설 같은 받아 가끔. 어렵지 직접 않으니 해보자 코드 내용은. import random def randsent(text_in): text_in = text_in.split(".") text_out = [] for sentence in text_in: temp = sentence.split() random.shuffle(temp) text_out.append(' '.join(temp)) return '. '.join(text_out) while(1): us.. 더보기
[Python3] 글자 순서 바꾸기 문자열이 입력되면 단어들 각각의 순서를 바꿔라예) 안녕하세요 여러분 -> 녕안세요하 러분여 만우을절 맞이여하 터기부여서 드와코 행결과를실 한외제 모든 글자는 이 램로을프그 쳐거 나오는 글로자 다한. 우히연 로대제 는오나 가글자 러더 을있 수 으있나 그은것 로대그것 에운 따르기로 고하 원본과 지같 까지을않때 덤랜 정을렬 하는 를드코 넣지 않았다. 의독자들 혼란을 그만 기키으일 위해 하고각설 프그램로 를코드 보자.import random def randlist(text_in): text_in = text_in.split(" ") text_out = [] for word in text_in: word = list(word) random.shuffle(word) # 리스트 요소들을 섞는다. text_out.ap.. 더보기
미래를 바꾼 아홉가지 알고리즘 - 존 맥코믹 저자 존 맥코믹은 컴퓨터 과학을 연구하고 교육하는 분이시다. 그는 이 책을 통하여 오늘날 컴퓨터를 움직여 상상으로만 존재했던 일들을 하게 해주는 위대한 아이디어를 소개하고 있다. 이 책의 장점은 어려운 분야를 설명할 때도 간단한 예시와 비유를 통하여 설명을 하니 이전에 두리뭉실하게 알고 있었던 개념을 다시 잡게 해주는 것이다. 특히 '공개 키 암호와'와 '계산 가능성과 결정 불가능성'를 이해하는데 많은 도움을 받았다. 어려운 수학이나 컴퓨터 구조에 대한 부분은 생략을 많이 하였기에 비전공자들도 재밌게 읽을 수 있을 것이라 생각이 든다. 다음은 이 책에서 소개하고자 하는 내용의 목차이다. 1장. 시작하며: 컴퓨터를 움직이는 위대한 아이디어들 2장. 검색엔진 인덱싱: 세상에서 가장 큰 건초 더미에서 바늘 찾.. 더보기
[Python3] 이진수 게임! [출처 - 네이버웹툰: 공대생 너무 만화 44화]주로 공대쪽 특히 컴퓨터공학과에서 유명한 게임이다. 서로 번갈아가며 진수를 말하는 게임인데 5자리수정도인 16을 넘어가기 힘들다. 정확한 게임규칙은 다음과 같다.이진수로 0, 1, 10, 11, 100, ... 을 차례로 돌아가며 한 숫자씩 말한다.예를 들어 A와 B가 게임을 한다고 하면, A: 0 B: 1 A: 1 B: 0 A: 1 B: 1...이런식으로 돌아가는 것이다.import sys while(1): #먼저할지 나중에 할지 order = input("First or Last?? (F/L) ") if (order.lower() == 'f'): i = 0 break elif (order.lower() == 'l'): print(0) i = 1 brea.. 더보기
컴퓨팅 사고력을 위한 소프트웨어 교육 - 한선관, 류미영 소프트웨어를 언플러그드나 여러 활동을 통해 학습하는 다양한 방법을 소개하고 있다. 또, 소프트교육이 왜 필요한가에 따른 내용과 컴퓨팅 사고를 어떻게 하는지 알려주고 있다. 특히, 창의 컴퓨팅 교육을 강조하는데, 어떻게 아이들이 소프트웨어와 친해지고 놀이를 통해 배우는 방법들을 소개하고 있다. 학습 자료와 평가 방법 학습 목표등을 자세히 열거했으니, 학교 정보 선생님이나 초등학교 교사라면 이 책이 도움이 될 것이다. 가볍게 읽을 생각으로 들었지만 교육과정이나 각각의 교육에대한 매우 상세한 설명이 있어 마치 거대한 논문을 읽는 듯한 느낌이 들었다. 전에 교육봉사를 한적이 많았는데, 이 책을 읽으며 이렇게도 가르치는 방법이 있구나라는 생각이 들었다. 이 뿐만 아니라, 내가 어렵게 설명했던 점(로봇의 좌회전, .. 더보기
[Python3] 31게임! 필승전략 1부터 31까지 순서대로 번갈아가며 1개 이상 3개 이하의 숫자를 말한다.31을 말하면 게임에서 패배한다. ex) 1, 2, 3 / 4, 5 / 6, 7, 8 / .... / 28, 29, 30 / 31(패배) 내가 먼저 시작한다고 할 때 이 게임을 반드시 이기고 싶다면 어떻게 해야할까? 우선, 상대방이 31을 말하게 할려면 내가 30을 말해야 한다는 것부터 시작하자. 내가 30을 말하기 위해선 내가 26을 말해서 상대방이 27을 말하여 내가 28, 29, 30을 말하거나 상대방이 27, 28를 말해서, 내가 29, 30을 말하거나 상대방이 27, 28, 29를 말하여 내가 30을 말을 하도록 해야한다. 그런식으로 쭉 생각해 나가면 다음 숫자들을 내가 반드시 말해야 한다.2, 6, 10, 14, 18, .. 더보기