알고리즘

[Python&SQL] 각 자리수 합 더하기

LeeSeunghyuk 2021. 1. 15. 10:53
반응형

 

안녕하세요.

이승혁입니다.

파이썬과 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으로 해당 자리수를 잘라내는 아이디어만 떠올리면

쉽게 구현이 가능했습니다.

 

 

반응형