algorithm
13 posts
Programmers LV1 > 3진법 뒤집기

존재하는 함수들을 사용한다면 위처럼 간단하게 코딩할 수도 있다. 하지만, 간단한 문제이므로 직접 함수들을 구성하면 논리력을 강화시킬 수 있는 좋은 공부가 될 것이다. 간단하게 수행해야 할 단계들을 구상하고, 각 단계들을 디테일하게 구현하는 탑다운 방식으로 짜볼 것이다.

0012 > 파이썬 기본수학 - 2 | 골드바흐의 추측

#9020 골드바흐의 추측 백준 알고리즘 9020# 구조를 다음과 같이 하여 문제를 해결할 예정 골드바흐 파티션을 구할 수 n n은 두 수의 합으로 나타낼 수 있으므로 n = p + q로 표현 4부터 10000사이의 짝수만 골드바흐 파티션을 구할 예정이므로 2로 나누어 생각할 수 있다. n = p+q에서 p = n/2 , q = n/2로 시작한다. (n = (n/2) + (n/2) 이므로 ) 그리고 p는 1씩 감소, q는 1씩 증가하는 방식으로 n을 표현할 수 있다. p가 1이면 소수가 아니므로 이를 제외하면 이 때 나올 수 있는 합의 조합은 (n/2 - 1) 가지 이 중 소수의 합으로 이루어진 경우에만 골드바흐 파티션 이므로 각각의 p와 q가 소수인지 확인을한다. 모든 골드바흐 파티션을 구하는 것이 아니라 두 수의 차가 최소인 값을 출력해주는 것이 문제의 요구사항 16을 예로 들어보면, p q 두 수의 차 골드바흐 파티션 8 8 0 x 7 9 2 x 6 …

0011 > 파이썬 랜덤, 엑셀파일 접근, 로또

잠시 쉬어가는 의미로 파이썬에서의 랜덤함수 그리고 엑셀파일 접근하는 방법을 익혀서 이를 활용하여 로또 알고리즘을 만들어보자 계획은 이러하다 동행로또 홈페이지에서 회차별 정보를 엑셀로 제공해준다. 이를 다운받으면 역대 당첨번호를 쉽게 엑셀로 만들 수 있다. 엑셀로 만든 이유는 이 엑셀에서 파이썬으로 데이터를 가져오기 편하기 때문 엑셀파일을 열어보면 역대 회차별 당첨금액, 당첨번호가 다 나온다. 여기에서 내가 활용할 데이터는 당첨번호다. 이렇게 당첨번호만 가져오고 이는 각각 배열로서 담기게 될 것이다. 이 데이터들은 각 로또 번호와 대차비교하여 1등은 3000점 2등은 600점 3등은 30점 4등은 10점 5등은 1점 이렇게 점수를 매겨준다. 정확한 계산을 위해서는 각 회차별 당첨금액으로 점수를 매기는 것이 좋았겠지만 사실 로또가 매번 독립시행인데 이런 점수가 무슨 의미가 있을까? 그냥 재미를 위해 이정도 스케일로만 계산해봤다. 이제 로또 번호를 랜덤함수를 이용해서 생성해볼 것이…

0010 > 파이썬 기본 수학 - 1 extra

#10250 ACM 호텔 백준 알고리즘 10250# 문제를 단순화 해서 해석해보자면, 이동거리는 엘리베이터로 이동하는 거리는 따지지 않고 이동하는 거리로 생각하므로 W는 이동거리가 되고 남아있는 방중 이 거리가 가장 짧은 방을 배정해주면 된다. 다만, W가 같을때는 H에 따라 호감도가 달라지는 구조이다. 그러므로 방배정은 H층이라 하면 1부터 h까지 방배정하고, 다시 1부터 h까지 … 1부터 h까지 순서로 방배정을 하게 되어있다. 반복문을 이용해 푼다면 매우 간단할 것 같다. #2775 부녀회장이 될테야 백준 알고리즘 2775# k층의 n호에 몇 명이 살고 있는지 알아내는 함수 k층의 n호에 살기 위해서는 (k-1)층의 1호~n호까지의 사람의 수만큼을 데려와야 한다. 0층 1호부터 i호까지 순서대로 0~i명이 산다. K0,i = {1,2,3,4, … ,i} K1,i = {1,3,6,10, … ,i(i-1)/2} K2,i = {1,4,10,20, … , Sum(1,i)} …

0009 > 파이썬 기본 수학 - 1

#1712 손익분기점 백준 알고리즘 1712# 코드를 작성하기 전에 관계식을 세울 필요가 있다. A는 고정적으로 들어가는 비용이고 B는 노트북 한대를 생산하는데 들어가는 비용이기 때문에, 제작비용은 A + Bx 가된다. 노트북의 가격은 C원이고, x대를 팔았을 때의 돈이 수입이 된다. 제작한 노트북은 모두 팔린다는 가정하에 제작비용보다 수입이 많아지는 지점이 바로 손익분기점이 된다. A+Bx < Cx 로 식을 세울 수 있으며, x의 최소값이 손익분기점이다. 식을 x에 관하여 정리해보면 이를 만족하는 x의 최소값을 구하면 된다. 이러한 수식이 만족하려면 ( C != B )이여야 한다. 또한 C가 B보다 작은 값이면 음수가 되어 절대로 손익분기가 발생하지 않는다. A / ( C-B) < x 를 만족하는 x의 최소값 (단, x는 정수)이 손익분기점이며, ( C<=B ) 이면 손익분기점이 발생하지 않으므로 -1이다. c.f) 틈새정보 : 손익분기점은 Break-even point이…

0008 > 파이썬 문자열

숫자의 합 백준 알고리즘 11720# 첫째줄에 숫자의 갯수를 적어주고 둘째줄에 입력한 수의 합을 구해주는 단순한 구조 둘째줄의 수는 정수의 의미라기보다는 공백없는 숫자들의 나열, 즉 문자열이라 봐야 해결가능한 문제다. 파이썬에서 기본적으로 입력받은 값은 문자열이다. 이를 int, float등 형 변환 해주지 않으면 수가 입력되더라도 문자열이므로 각 자릿수들을 분리하는 것이 매우 간단하다. 이후, 각 문자들을 정수로 변환해주고 합산해주면 끝 x가 둘째줄이고, 합을 구하는 과정에서 int형으로 형변환 해주는 것이 핵심 알파벳 찾기 백준 알고리즘 10809# 소문자로만 이루어진 단어를 입력하면 a~z까지 단어에 각각 처음 등장하는 위치를 출력해주는 프로그램 첫번째 위치는 0부터 시작하며, 존재하지 않을 경우는 -1을 출력 첫번째로 생각할 것이 단어와 알파벳이 주어졌을 때, 단어에 해당 알파벳이 존재하는지 확인하는 함수다. 둘째로는 a~z까지 각각 이 함수들을 써서 각 위치들을 …

0007 > 파이썬 함수선언

백준 알고리즘에서 말하길 함수를 쓰면 코드가 깔끔해진다고 한다. 말 그대로, 자주 쓸 것 같은 기능들을 함수로 구현해놓으면 재사용이 가능하다. 파이썬에서 함수 선언하는 법은 매우 간단하다. def라는 키워드로 함수선언임을 알리고(영어단어 Define : 정의하다 에서 따옴) 함수이름과 들어가는 매개변수를 적어주면 된다. 그리고 return없이 그냥 함수를 종료하면 void함수가 된다. 리턴값을 한 개 이상 줄 수 있다는 것이 특징 리턴값이 반드시 한 개인 것이 아니다. 리턴값이 없을 수도 있고, 여러개의 리턴값이 나올 수도 있다. 다만 예를들어 리턴값이 2개이면 이를 받을 2개의 변수가 필요하므로 함수를 구성할 때 이를 고려할 필요가 있다. 또한, 함수의 선언은 함수의 사용하는 시점보다 앞서야 한다. 무슨말이냐 하면 아래 사진처럼 함수를 쓰고나서 그 후에 이 함수가 무엇인지 정의해줘도 프로그램은 이 함수의 의미를 모른다. 그러므로 함수를 미리 선언해주고 사용하자 파이썬은 컴파…

0006 > 파이썬 1차원 배열 및 관련 알고리즘 문제

파이썬에서는 배열 선언하는 것이 너무 간단하다. 배열 이름과 []만 쳐주면 끝이다. 이렇게 하면 비어있는 배열 선언이 완료된다. 안에 넣을 수 있는 요소는 String, int, float, 등… 상관없다. 자바나 C언어에서는 같은 데이터 타입만 담을 수 있는 것에 반해 데이터 타입은 신경쓰지 않는다. 또한, 이러한 형태로, ()안에 담긴 구조들을 넣을 수도 있고 배열을 요소로서 가질 수도 있다. 다차원 배열은 다음시간에 자세히 다뤄보도록 하고, 이번시간에는 1차원 배열에 한해서 문제를 해결해보자! 최소, 최대 백준 알고리즘 10818# 첫째줄에서는 배열의 크기, 둘째 줄에는 각각 들어갈 값들이다. 그러면 최솟값과 최댓값을 출력해주면 끝 최솟값과 최댓값을 얻는 방법은 무엇일까? 처음부터 끝까지 다 확인을 해서 가장 작은 값을 최솟값, 가장 큰 값을 최댓값이라 하면 된다. 먼저 배열을 입력받았을 때, 최댓값, 최솟값을 구하는 함수들을 각각 정의해주고 배열을 채워주는 부분을 짜…

0005 > 파이썬 while 문 | 두 수의 합 반복출력, 더하기 싸이클

전 시간에 for문을 이해해 보았다. 이번 시간에는 while문을 익혀볼 것 while문은 구조가 더 단순하다. 저번 세로 곱셈 알고리즘에서 사용했던 while문을 보면 이해가 쉽다. 조건을 만족하는 동안, 반복문을 시행하겠다는 의미가 된다. 물론 중간에 조건문을 주어서 break, continue 키워드 이용도 가능 반복문을 쓸 때에는 for문, while문 둘 중 어느 것을 사용해도 상관없이 가능하지만 내가 느끼는 바로는 어떤 리스트의 값들에 접근하는 경우(순차적 반복의 특성을 가지는 경우)에는 for문 , 특정 조건에 한해서 반복할 때는 while문 이렇게 사용하는 것이 적절하겠다는 생각이 들었다. 간단한 문제 풀이로 바로 while문을 학습해보자 두 수의 합 반복출력 백준 알고리즘 10952# 두 수를 입력받고 합을 출력하는 반복문을 작성하는 것이다. 무한 반복인데, 0 0 을 입력받으면 반복문을 빠져나가는 구조 조건은 크게 두 가지로 할 수 있겠다. a와 b가 각각 0…

0004 > 파이썬 for문, print() 포맷팅 | 합 (시그마), 구구단, 별 찍기

c와 자바에서의 for문의 구조는 다음과 같다. \1) 초깃값을 주고 \2) 조건식을 주어서 이 조건에 만족하는 동안만 반복하게 한다. \3) 루틴이 한 바퀴 돌고 난 후 값의 변화를 주는 부분 이를 예를 들어 설명하자면 1부터 10까지의 합을 구하는 반복문을 만든다고 할 때, 초깃값 num = 1이라고 주었고, 조건으로 num이 10이 될 때까지는 반복하겠다고 조건식을 주었다. 그리고 한 바퀴 돌고 나면 num의 값을 1 증가시키겠다는 의미가 된다. 그런데, 파이썬에서 for 문은 이와 사용하는 방법이 다르다. 기본 구조는 이러하다. 자바의 for-each문과 사용법이 유사하다. for-each in에 있는 리스트의 1번부터 10번까지, 반복문의 내용을 수행하겠다는 의미가 된다. 각 루틴당, num의 의미는 num인덱스가 된다. 기본적으로 for문은 특정 리스트의 첫 번째부터 끝까지 접근하면서 어떠한 작업을 수행할 때 이용하는 듯 보인다. 기존의 자바 for문에 익숙하다 보니 …

0003 > 파이썬 조건문 | 시험 성적, 윤년, 알람시계

대표적인 조건문으로 if 문이 있다. 전 시간 while 문에서 살짝 살펴보았는데 파이썬에서는 { } 대신에 : 과 들여 쓰기로 표현한다. 자바에서는 if, else, else if 이렇게 세 가지로 크게 나눌 수 있는데 파이썬에서는 if, else, elif로 세 가지로 나뉜다 else if 가 elif로 바뀌었다는 점이 차이 또한, switch 문은 파이썬에 존재하지 않는다. 문법적으로 존재하지는 않지만 딕셔너리를 활용하면 비슷하게 구현은 가능하다. 이번 시간에는 조건문의 학습이 주요 목표이기 때문에 딕셔너리는 추후 활용할 일이 있으면 그때 학습하도록 하자. #1 시험 성적 백준 알고리즘 9498# 시험 점수를 입력받고, 값이 해당되는 범위에 따라 등급을 출력해 주는 간단한 프로그램 이런 문제는 switch문을 이용하면 간단하게 해결 가능하지만, 파이썬에는 없기 때문에 if 문으로 해결해보자. if 문을 5번 돌려서 등급을 지정해 주는 방법도 가능하긴 하지만, 이렇게 되면…

0002 > 파이썬 숫자 자리수 분리하기, 세로 곱셈 표현하기

백준 알고리즘 2588# 세 자릿수의 곱셈을 수행하는 문제 단순히 A * B의 결과를 출력하는 것이 아니라 세로 곱셈의 원리를 프로그램으로 표현해야 하는 것이다. 쉬워 보이는 문제지만 무려 초등부 올림피아드에 나왔던 문제다… 계산 자체가 어려운 것은 아니지만, 이를 표현하기 위해서는 수의 각 자릿수를 분리해내야 한다. 우선 (1)~(6)까지 각각의 값들을 num1 ~ num6이라 하겠다. num1과 num2는 입력, num3~num6은 출력값 중요한 건 num2의 각 자릿수를 분리해야만 나머지 변수들의 값을 계산할 수 있다. 수를 분리해내는 여러 방법이 있겠지만, 나는 1의 자리, 10의 자리, 100의 자리를 각각 분리해와서 하나의 배열에 담아줄 것이다. 그래서 num2는 배열이 되고, num20, num21, num2 이렇게 나뉘며 각각의 의미는 1의 자리 수, 10의 자리 수, 100의 자리 수다. 첫째 줄에 num1을 입력받고, num2는 비어있는 배열 inNum2는…

0001 > 파이썬 시작하기 | 파이썬 입출력

알고리즘 공부를 시작해보려 한다. 이번 공부에서는 프로젝트 단위의 개발을 목표로 하는 것이 아니기 때문에, 알고리즘 그 자체의 논리적 순서를 파악하고 검증하기 위한 가벼운 언어가 프로그래밍 도구로서 필요했다. 나에게 익숙한 C언어와 자바는 이러한 간단한 일들을 하기에는 무거운 편이었다. 반면 파이썬은 한 번도 만져본 적이 없다. 파이썬은 데이터 분석이나 딥러닝 쪽에서 많이 쓰이는 언어이고, 이 분야가 4차 산업혁명의 핵심이 아니던가 파이썬 문법도 공부하면서 동시에 알고리즘도 공부해볼 수 있을 것 같아 파이썬으로 알고리즘을 해결하는 연습을 해볼 것이다. 개발에 적합한 IDE를 찾아야 했는데 주피터가 압도적으로 점유율이 높았다. 그러나 조금 찾아보니 초보자가 시작하기에는 어려울 수 있다고 한다. 또한 웹에서 사용할 때 주로 사용한다고 하니, 초보자에 더 적합한 IDE로 파이참을 선택했다. 찾아보니 많은 이들이 추천해 주기도 했었다. 파이참 사이트 파이참을 설치하고 처음 해야 할 …