study/CodingTest
그룹 알고리즘 w/파이썬
고기만두(개발자)
2023. 5. 29. 10:49
728x90
반응형
특정 키값에 해당하는 그룹화된 합계 리스트를 만든다
항목명 | 수량 |
RADIO | 3 |
TV | 1 |
RADIO | 2 |
DVD | 4 |
이런 식으로 중구난방으로 흩어진 값인데
항목명 | 수량 |
DVD | 4 |
RADIO | 5 |
TV | 1 |
수량을 항목별로 더해서 합계를 내고, 정렬하고 싶다.
어차피 문자도 아스키 코드값 따라가니까 우리가 아는 그 사전 순서대로 정렬이 될거고,
정렬은 똑같이 진행하면 되는데
같은 상품명일 때 수량을 누적합계 내고
다음 항목과 다르거나, 마지막이면 저장.
#그룹 알고리즘: 특정 키값에 해당하는 그룹화된 합계 리스트 만들기
#[?] 컬렉션형태의 데이터를 특정 키값으로 그룹화
#테스트용 레코드클래스
class Record():
def __init__(self, name, quantity):
self.name = name #상품명
self.quantity = quantity #수량
def main():
#[1] input
records = [Record("RADIO",3), Record("TV",1), Record("RADIO",2), Record("DVD",4)]
groups = [] #출력데이터
n = len(records)
#[2] process : group algorithm - sort -> sum -> group
#[a] sort
for i in range (n-1):
for j in range( i+1, n):
if (records[i].name > records[j].name):
temp = records[i]
records[i] = records[j]
records[j] = temp #swap
#[b] group
subtotal = 0 #소계 변수초기화
for i in range(n):
subtotal = subtotal + records[i].quantity #같은 상품명의 수량을 누적
#다음 레코드가 없거나, 현재레코드와 다음레코드가 다르면 저장
if (((i+1) == n) or (records[i].name != records[i+1].name)) :
#한 그룹의 키값을 지정하고 소계를 구함
groups.append(Record(records[i].name, subtotal))
subtotal = 0 #소계 초기화
#[3] output
print("[1] 정렬된 원본데이터 : ")
for r in records:
print(f"{r.name.rjust(6)} - {r.quantity}")
print("[2] 이름으로 그룹화된 데이터 : ")
for g in groups:
print(f"{g.name.rjust(6)} - {g.quantity}")
main()
반응형
그런데, 이건 항목이 RADIO TV DVD 요렇게 3개뿐인 걸 알고 있는 상황에서 가능한 로직일 것 같고
현업에서의 나라면 아마 각 항목별로 변수 다 따로 따서 저장했든지 하지 않았을까..
물론 나의 업무 환경에서는 이미 DB에 친 값을 읽어오는 경우가 더 많을 것 같지만
만약 이런 식으로 계산을 해야 한다면 ㅇㅇ..
728x90
반응형