💻 Computer Science (34) 썸네일형 리스트형 [python] 손흥민을 찾아라! 선형탐색과 이분탐색 (Search) ??? : 훠훠.. 손흉미니 어디가쒀 .. 문쌤이 찾으시는 손흥민이 어디있는지 찾아봅시다. 선수들이 일렬로 서있을때, 등번호순으로 서있다면 No.7 손흥민선수는 비교적 금방 찾을수있을겁니다. 이번엔 선수들을 섞어봅시다. 포지션별로 골키퍼-수비수-미드필더-공격수 순으로 서있다면? 공격수인 손흥민선수는 뒤쪽에 있겠죠. 제일 앞에서부터 한명씩 확인하기엔, 등번호 순대로 서있을때보다 오래걸릴겁니다. 이제는 선수들을 무작위로 섞어봅시다. 손흥민선수가 앞쪽에있다면 빨리 찾을수있을것이고, 뒤쪽에있다면 늦게찾을겁니다. 오늘은 탐색의 기초. 선형탐색(Linear Search)과 이분탐색(Binary Search)에 대해 알아봅시다. 탐색은 말그대로, 많은 데이터가있는 자료에서 우리가 필요한 데이터를 찾는겁니다. 예를들어.. [python] 백준 1152 : 단어의 개수 단어를 판별할필요가 없다. 논리구조를 생각해보면 그냥 입력되는 문자열을 띄어쓰기 기준으로 split해서 카운트하면 된다. 난 리스트에 넣어서 리스트 길이로 단어 갯수를 출력하고싶다. str_list=list(map(str,input().split())) print(len(str_list)) 이건데 조금더 짧게할수있다. print(len(list(map(str,input().split())))) 한줄로 끝낼수있다. 자기전에 후딱풀기 좋은 문제였다. [python] 백준 1024 : 수열의 합 (정답코드는 제일 밑에 있읍니다. ) 입력값은 target number n과 length l입니다. target number을 최소 l개의 연속한 자연수의 합으로 나타내야하는 문제인데요, 만약 length가 100이 넘어가거나 해당 리스트가 존재하지 않는다면 -1을 출력합니다. 예를들어 입력값이 (n:15, l:3)이라면 답은 더했을때 15가되는 3개이상의 연속한 자연수 4,5,6이 되겠지요. 코드를 짜기전 논리구조를 생각해봅시다. 논리구조 설명할땐 그림이 최곤데 ㅋㅋ 주저리주저리 글을 썼네요 그냥 수학계산입니다. 코드로 구현해봅시다. n,l = map(int,input().split()) while True: sum_plus = l*(l-1)*(1/2) if (n-sum_plus)%l==0 and ((.. [python] 백준 1064 : 평행사변형 세 점이 입력값으로 주어지므로 평행사변형은 총 3개를 만들수있습니다. 세 점이 결정된이상 나머지 한점은 구할필요가 없고 아래 그림 3가지경우중 한가지로 자동 결정됩니다. 세 점에다가 번호를 붙여봤는데요.. 평행사변형의 경우 "평행하지 않은 두 변의 길이만 결정되면 둘레는 두변길이합 x2" 로 구할수있습니다. 둘레는 두 변이 1번점에서 뻗어나오는경우, 2번,3번점에서 뻗어나오는경우 총 3가지 경우가 있져. 그럼 이 세가지 경우의 최댓값-최솟값으로 답을 구할수있겠네요. 만약 평행사변형이 만들어지지않는 경우엔 -1을 출력하랍니다. 어떤경우에 평행사변형이 만들어지지 않을까요? 1. 세 점이 일직선상에 있는경우, 2. 두점이 같을경우, 3. 세점이 모두 같을경우 일단 이정도 생각이나네요 그럼 논리구조를 정리해봅시.. [python] 백준 1032 : 명령 프롬프트 문제읽고 진짠지 급 궁금해져서 명령프롬프트에 dir Unti?????.ipynb를 입력해봤읍니다. 진실이었던걸로... 문제를 한마디로 요약해보면 "같은 길이의 문자열을 n개 입력받아서 문자열들의 공통부분은 문자 그대로 출력하고 다른부분은 ?로 출력하라"는 겁니다. 크게 어려울건 없지만 고려해야하는 사항 한가지만 짚고 넘어갑시다. 문자열을 n개 입력받았을때 비교를 어떻게할까? 입니다. 비교만 잘된다면 공통부분은 글자그대로, 다른부분은 ?로 리스트에 넣어버리면 끝나겠죠. 입력받는 문자열의 길이는 모두 같으므로 어떤 한 문자열을 기준으로 나머지문자열들을 계속 비교해주는 방식도 괜찮을거같네요. 코드작성전 논리구조를 생각해봅시다. 만약 기준을 첫번째로 입력받은 문자열로 설정한다면, 첫번째로 입력받은 문자열과, 나.. [python] 백준 1049 : 기타줄 입력받은 기타줄의 갯수를 6으로 나눈후 몫x(브랜드중 6중 패키지의 최소가격)+나머지x(낱개의 최소가격) ☜이걸로 계산하면 되는거아님?? 기본적인 틀은 그렇게 갖추되 몇가지 고려해야할 사항이 있습니다. 1. 6개 패키지가 과연 낱개 6개보다 저렴한가? 당연한거 아님? 싶지만 입력예시에 (60, 4)가 있네요.. 가끔 저런 실수를하시는 멍충멍충 사장님들이 계신가봅니다 for문을 이용해 개별브랜드의 각 낱개가격과 6개 패키지 가격을 비교해줍니다. 낱개x6의 가격이 패키지가격보다 비싸면 Ok. 만약 싸다면.. 이 브랜드의 낱개x6의 가격을 다른 브랜드의 6개 패키지 가격과 비교해 패키지의 최소가격을 선정합니다. 2. 6개로 나눈 나머지는 낱개로 처리하는게 저렴한가 아니면 6개 패키지를 사는게 저렴한가? 문제를.. [python] 백준 1009 : 분산처리 1번데이터 -> 1번컴퓨터 ... 10번데이터 -> 10번컴퓨터, 11번데이터 -> 1번컴퓨터 ... 그렇다면 1091번데이터는 -> 1번컴퓨터입니다. 10번단위로 순환되므로 컴퓨터번호는 데이터의 일의자리수로 판단할수있습니다. 문제를 해결하기위해선 *a^b를 계산해 문자열로 만든후 가장 끝자리수를 출력하는방식이 있을것이고 *어떤 정수를 제곱했을때 일의자리수는 순환되므로 순환규칙을 이용할수도 있을겁니다. 첫번째 방법은 느낌상 안될거같죠? 이전에도 시간초과의 경험이 있기때문에 계산이 길어지는것에 대해 경계해야합니다. T=int(input()) for _ in range(T): a,b=map(int,input().split()) n=str(a**b) print(n[len(n)-1]) 첫번째방법을 구현한 코드입.. [C/C++] 백준 2739 : 구구단 문제를풀며 순환문의 구조를 알아봅시다. for문을 파이썬에선 반복문?이라고 했던거같은데 C에선 순환문이란 표현을 쓰는군요. 어쨌든 기본적인 기능은 비슷하니 구조와 사용법을 알아봅시다. 구구단 출력은 for문을 이용해 입력받은수에 1부터 9까지 곱해주면 되겠죠 #include int main(void) { int i,n; scanf("%d",&n); for(i=1;i 이전 1 2 3 4 5 다음