양의 정수n과k가 주어진다.n을k진수로 변환한 수를a라고 하자.a의 각 자릿수를 0을 기준으로 나눈 결과를 집합b라고 하자. 0이 연속으로 나와서 공백이 생기는 경우는 집합b에 포함되지 않는다. 집합b에 있는 수의 합을k진수로 출력하자. 예를 들어,n= 19,k= 2이면a= 100112,b= {1, 11}, 1 + 11 = 12, 12 = 11002이므로 1100을 출력한다.
입력
첫 번째 줄에 양의 정수n과k가 공백을 사이에 두고 순서대로 주어진다.
출력
첫 번째 줄에 집합b에 있는 수의 합을k진수로 출력한다.
제한
1 ≤n≤ 1,000,000
2 ≤k≤ 10
예제 입력 1
437674 3
예제 출력 1
22101
437674를 3진수 변환하면a= 2110201010113이다.
2110201010113을 0을 기준으로 나누면b= {211, 2, 1, 1, 11}이다.
사실 int(n,k)가 진수로 변경해주는 줄 알았는데 그런 건 아니어서 직접 함수로 구현해봤다.
값의 몫과 나머지를 구한다.
나머지는 리스트에 추가해둔다.
몫을 값으로 만들고 1,2번 과정을 n이 0보다 클 때까지 반복한다.
이후 리스트의 순서가 거꾸로이니 반대로 뒤집고 숫자로 만든다.
그리고 알고리즘 풀이 함수로 만들면 끝~
map에 lambda로 예외사항만 추가해주면 된다. 1002 숫자가 split이 되면 '1', '', '2'처럼 되는 예외사항을 추가해줬다.
# 진수 변경 함수 구현
def to_base(n,k):
transes = []
while n > 0:
transes.append(str(n%k))
n //= k
transed_number = ''.join(transes[::-1])
return int(transed_number)
# 알고리즘 풀이
def kbase_divide(n,k):
# 타입 변경 후 k진수로 변환
transed_number = to_base(n,k)
# 변환된 수 0을 기준으로 나눠서 리스트로 변환
split_numbers_by_zero = str(transed_number).split('0')
# 0이 남는 경우가 있음을 확인 lambda 형태로 수식 추가
# 리스트 안에 값을 정수 형태로 바꾼 뒤 총합
sum_split_numbers = sum(map(lambda x : int(x) if x != '' else 0 ,split_numbers_by_zero))
# 다 합친 수를 k진수로 변환함
transed_split_numbers = to_base(sum_split_numbers, k)
print(transed_split_numbers)
if __name__ == "__main__":
n, k = map(int,input().split())
kbase_divide(n,k)
params = {
'serviceKey': serviceKey,
'pageNo': '1', # 페이지 번호
'numOfRows': '10', # 한 번에 가져올 데이터 개수
'resultType': 'json', # 응답 형식 (JSON)
'sgId': '20200415', # 선거 ID
'sgTypecode': '2', # 선거 구분 코드
'cnddtId': '100135069', # 후보자 ID
}
ex) 왜 같은 제품을 보고도 일부 사람은 구매를 하지만, 다른 사람은 구매하지 않았을까요?
인과-행동 프레임워크 : 행동이 가장 우선시 되고 이를 인관관계 다이어그램과 데이터로 이해할 수 있습니다.
행동 데이터 분석 ch.1 31페이지
1-1. 인과관계 분석을 선택한 이유
기술과 예측만으로는 인간의 행동을 파악하기 어렵기 때문이다.
- 분석의 유형
1. 기술 분석 : 데이터에 대한 설명을 제공
2. 예측 분석 : "현재와 같은 조건이 지속된다면~는 무엇이 될까?" 또는 "아직 측정하지 않은 것 확인"
3. 인과관계 분석 : "만약 이렇다면?" 또는 "다른 조건에서는 어떻게 될까?"
가장 널리 알려진 인과관계 분석 도구 = A/B 테스트
- 인간은 복잡한 존재다
1. 여러 요인에 영향을 받는다 : 하나의 변수가 갖는 예측력은 높지 않다.
2. 상황에 따라 다르다 : 작은 변화로 환경이 달라지면 결과를 예측하기 어렵다.
3. 가변적이다 : 매번 굉장히 다른 행동을 보인다.
4. 혁신적이다 : 환경조건이 변하면 한 번도 하지 않은 행동을 할 수 있다.
5. 전략적이다 : 일부러 속임수를 쓰기도 한다.
+) 이를 공감하지 못하는 수학적인 독자들에게
1. 보간법(interpolation) : 새로운 데이터를 구할 때 예측한 숫자를 관측한 숫자 사이의 있는 값으로 설정하는 방법
2. 보외법(extrapolation) : 수학에서 원래의 관찰 범위를 넘어서서 다른 변수와의 관계에 기초하여 변수의 값을 추정하는 과정
3. 차원의 저주 : 데이터 학습을 위해 차원이 증가하면서 학습데이터 수가 차원의 수보다 적어져 성능이 저하되는 현상
1-2. 회귀 분석을 방해하는 교란
- 회귀 분석의 용도
1. 예측 분석 : 알 수 없는(주로 미래)의 값을 추정할 때 사용
2. 인과관계 분석 : 종속변수와 독립변수와의 관계 자체가 중요. 상관계수가 독립변수의 인과 효과를 나타내는 좋은 지표
- 데이터
위에 허브에서 가져오면 된다
- 상관관계가 인과관계가 아닌 이유
온도와 아이스크림 판매량이 온도가 1도씩 올라갈 때 마다 1.171달러씩 늘어난다.
유난히 더운 10월의 아이스크림을 추가 구매해도 매출이 예측값을 미치지 못할 수 있다.
왜냐하면, 예측에 영향을 끼치는 결정적인 요인을 포함시키지 않았기 때문이다.
여름방학에 학생들이 아이스크림을 많이 구매하러 가서 온도가 높은 기간에 매출이 높아지는 것이다.
판매시점은 기온과 매출의 관계를 교란하는 교란변수인 것이다.
교란 변수가 있다면 회귀모델의 계수를 상관관계로 해석해야한다.
- 날씨의 영향을 추가한다면
둘다 적절한 값으로 추정하는 것을 확인할 수 있다
print(ols("icecream_sales ~ temps + summer_months", data=stand_data_df).fit().summary())
- 사공이 많으면 배가 산으로 간다 (다중공선성)
그렇다면 변수를 더 많이 추가하면 어떨까?
기온 변수에 더해, 여름철 여부 변수, 아이스크림 매출 변수, 아이스 커피 매출 변수 3가지를 추가한다.
temps와 iced_coffee_sales 높은 p-value를 갖게 되고 summer_months만 의미 있는 변수가 된다.
# 다중공선성
print(ols("icecream_sales ~ temps + summer_months + iced_coffee_sales",data=stand_data_df).fit().summary())
- 허위 상관관계 벅슨의 역설(Berkson’s paradox) = 해명 효과(explain-away effect)
아이스크림을 구매한 사람 중 초콜릿 아이스크림을 구매한 사람, 바닐라 아이스크림을 구매한 사람의 인과관계를 보면 음의 상관관계가 나타난다.
초콜릿 아이스크림을 구매한 사람은 바닐라 아이스크림이 싫어지거나 반대의 일도 일어나는 것일까?
초콜릿 아이스크림을 구매한 사람이 바닐라 아이스크림까지 구매한 일이 없기 때문에 음의 상관관계가 일어난 것이다.
초콜릿 맛을 좋아해서 아이스크림을 구매했다는 설명할 수 있지만, 초콜릿 맛을 좋아한다고 해서 바닐라 맛과의 상관관계는 구할 수 없다.
애초에 이 데이터에는 두가지 맛 다 싫어하는 사람이 없기 때문이다.
허위 상관관계가 발생한 것이다.