본문 바로가기

수학21

[ 파이썬(python) ] 백준 9625 - BABBA 📌 백준 9625 - BABBA 백준 9625 - BABBA 💡 나의 풀이 전형적인 DP(Dynamic Programming)문제였으나, 처음에 문제 그대로 i가 증가하면 바뀌는 문자열을 새로운 배열에 넣고 마지막에 총 몇 개인지 count를 사용하여 풀다가 시간 초과 판정을 받았다. 그래서 어떤 규칙이 있는지 살펴보니까 전체 A, B 총 개수를 구할 필요는 없고 A, B의 개수를 따로따로 구하면 된다. a[i] = a[i-1] + a[i-2]인 전형적인 피보나치(Fibonacci) 수열 형태를 보였다. 나는 DP를 사용할 때 전체 k의 최대값를 선언했는데, 그럴 필요 없이 k+1만큼만 줘서 그때그때 계산해도 된다. 또, 새롭게 배운 점은 a[0] = 1, a[1] = 0 대신, 처음부터 a=[1,0]을.. 2021. 5. 21.
[ 파이썬(python) ] 백준 1110 - 더하기 사이클 📍 백준 1110 - 더하기 사이클 백준 1110 - 더하기 사이클 ⚡️ 나의 풀이 문제의 조건대로 구현하면 되는 문제인데, n번 사이클을 돌고 나서 원래의 수와 같아지는 조건식을 잘못 넣어서 조금 헤맸다. 결론적으로 처음 입력을 새로운 변수 check로 선언하고 제일 마지막에 나온 값과 비교해주면 됐다. 또, 처음 조건에 주어진 수가 10보다 작으면 앞에 0을 붙인다고 나와있는데, 사실 이 조건은 없어도 되는 조건이다. 예를 들어 처음 주어진 수가 5라고 할 때, 앞에 0을 붙여주고 각 자리의 숫자를 더하면 0+5가 되는데, 0은 있으나 없으나 같은 값이 되기 때문이다. 따라서 해당 조건은 건너뛰고 생각하면 된다. 여담이지만 각 자리의 숫자를 더하는 방법은 다음과 같다. 재귀함수를 이용해서 10으로 나.. 2021. 5. 18.
[ 파이썬(python) ] 백준 4673 - 셀프 넘버 📍 백준 4673 - 셀프 넘버 백준 4673 - 셀프 넘버 ⚡️ 나의 풀이 문제는 대충 이해됐지만, 막상 코드로 표현하려니까 막막했다. 시작 범위를 어디서부터 잡아야 하는지도 잘 몰랐는데, 많은 고민 끝에 다음과 같은 방법을 생각했다. 생성자가 없는 숫자를 셀프 넘버라고 칭하니까 생성자가 있는 숫자들을 구하고 새로운 리스트에 담아주자. 전체 1 ~ 10000까지의 리스트를 초기화하고, 생성자가 있는 숫자들을 모두 빼면 나머지 값은 모두 셀프넘버가 된다. 문제에 10000보다 작거나 같은 셀프넘버라고 나와있으니까. 종료 범위는 10000이고, 시작 범위는 문제에 양의 정수 n에 대해 계산한다고 나와있으므로 1부터 시작한다. 또, 이와같이 생각했음에도 답이 도출되지 않았는데 원인은 target.append.. 2021. 5. 18.
[ 파이썬(python) ] 백준 1977 - 완전 제곱 수 📍 백준 1977 - 완전 제곱수 백준 1977 - 완전 제곱수 ⚡️ 나의 풀이 완전 제곱수를 만들 때는 root만 계산하면 되는 줄 알았는데, 반례가 있기 때문에 다시 제곱을 취해줘야 한다는 것을 처음 알았다. 그리고 root를 취할 때 math.sqrt 대신 i ** 0.5를 하면 간편하게 계산 할 수 있다. (이것도 처음 알았다.) 처음 수를 root를 취하자(i^0.5) (first = int(i \*\* 0.5)) first에 다시 거듭제곱(i^2)을 해준다. (second = first \*\* 2) while문을 사용하지 않아도 된다. 만약, append값이 없으면 ( num == [] )과 같이 사용한다. m = int(input()) n = int(input()) num = [] for .. 2021. 5. 17.
[ 파이썬(python) ] 백준 2845 - 파티가 끝나고 난 뒤 📍 백준 2845 - 파티가 끝나고 난 뒤 백준 2845 - 파티가 끝나고 난 뒤 ⚡️ 나의 풀이 입력에 사람의 수 * 파티가 열렸던 곳의 넓이를 해주면 전체 넓이를 알 수 있고 해당 값을 예제 입력을 하나씩 빼주면 답이 나온다. 리스트 안에서 각각의 원소들을 빼주는 방법은 lambda함수를 사용하여 간단하게 해결해주고 join 함수를 이용해 괄호를 풀어줬다. people, area = map(int, input().split()) news_paper = list(map(int, input().split())) gap_news_paper = list(map(lambda x: x - (people*area), news_paper)) print(' '.join(map(str, gap_news_paper))) 2021. 5. 14.