안녕하세요.
이승혁입니다.
파이썬과 Oracle SQL을 사용해 각 자리수의 합을 구해보도록 하겠습니다.
간단하게 구현할 수 있는 알고리즘으로 , 여러 방법으로 구현이 가능합니다.
## 각 자리수 출력하기
파이썬에선 슬라이싱 , SQL에서는 substr 함수가 있었습니다.
파이썬의 len 함수, SQL의 length 함수를 구하면 문자의 길이를 구할 수 있습니다.
이것만 알면 알고리즘은 벌써 머리속에 구현이 되었다고 생각합니다.
### Python 각자리수 합 구하기
데이터는 문자형인 경우가 많습니다.
따라서 실습 데이터도 문자형으로 사용하겠습니다.
for문과 len함수를 사용해 데이터를 출력해 봅니다.
data='1024'
for i in range(len(data)):
print(data[i])
이제 저 값들을 더하기만 하면 됩니다.
1. sum 누적
data='1024'
sum=0
for i in range(len(data)):
print(data[i],end=',')
sum+=int(data[i])
print('\n',sum)
2. Python Comprehension
data='1024'
new_data=[int(data[i]) for i in range(len(data))]
print(new_data,' = ',sum(new_data))
어떤 방법이 더 편해 보일까요 ?
Comprehension 기능을 모른다면 1번은 직관적이고 알기 쉽습니다.
Comprehension 기능을 알고 있다면 2번 방법이 더 간단 , 명료하고 나타내기 쉬워 보입니다.
또한 결과로 나온 리스트를 사용해 다른 응용도 할 수 있을 것 같습니다.
### SQL 각자리 수 합 구하기
알고리즘 구현보다 데이터 검색에 최적화된 쿼리를 사용하려면
파이썬보다는 조금 더 생각이 필요합니다
1. 문자 길이 구하기 -> length
2. 각 자리수 출력 -> substr
3. length & substr ? level
4. sum
계층적 질의를 사용, 1 부터 단어 길이까지 증가합니다.
substr을 사용해 각 단어 길이에서 1개씩 잘라냅니다.
# 1자리씩 잘라내기
select substr(1024,level,1)
from dual
connect by level<=length(1024)
1024를 한 자리씩 잘라내 보았습니다.
# 각 자리수 더하기
select sum(substr(1024,level,1)) 자리수합
from dual
connect by level<=length(1024)
sum 함수를 사용해 컬럼의 값을 모두 더했습니다.
length로 자리수를 구하고, substr으로 해당 자리수를 잘라내는 아이디어만 떠올리면
쉽게 구현이 가능했습니다.
'알고리즘' 카테고리의 다른 글
[Python algo] 분산 구하기 | 표준편차 구하기 (2) | 2021.01.21 |
---|---|
[Python algo] 중앙값 계산 | 중앙값 사용 (0) | 2021.01.20 |
[Python algo] 탐욕 알고리즘 | Greedy algorithm (7) | 2021.01.19 |
[Python&SQL] 치환문자를 통해 피타고라스 정리 구현 (1) | 2021.01.18 |
[Python&SQL] 적어도 불량품 1개일 확률 ? (7) | 2021.01.14 |
[Python & SQL] 몬테 카를로 | 원주율 구하기 (1) | 2021.01.09 |
[Python] 없는 수가 뭘까 ? 빠진수 찾기 (6) | 2021.01.07 |
[Python] 주사위 던지기 (2) | 2021.01.05 |