프로그래밍 스터디 #3 (Baekjoon 4673, 11399)
백준 셀프넘버
selfnum = [] # selfnum 리스트 선언
for i in range(1,10001): # selfnum 리스트에 1~10000 까지 추가
selfnum.append(i)
for i in range(1,10001):
ex = list(str(i)) # i 를 한자리 씩 끊어서 ex 리스트에 추가
cre = i # cre = i 로 초기값 설정
for j in range(len(ex)): # ex리스트에 길이 즉 자리수 만큼 루프
cre += int(ex[j]) # cre에 각각의 자리값 더해줌
if cre in selfnum: # 만약 selfnum 리스트에 cre 값이 있다면
selfnum.remove(cre) # cre 를 지워줌
selfnum.sort() # 정렬
print(selfnum) # 남아있는 값은 셀프넘버이기때문에 출력
맨 처음 짠 소스 코드 : 출력 결과에서 리스트로 출력했기 때문에 틀린 것 같다.
selfnum = []
for i in range(1,10001):
selfnum.append(i)
for i in range(1,10001):
ex = list(str(i))
cre = i
for j in range(len(ex)):
cre += int(ex[j])
if cre in selfnum:
selfnum.remove(cre)
selfnum.sort()
for k in range(len(selfnum)):
print(selfnum[k])
그래서 for문 하나를 더 추가해줘서 하나씩 뽑아주었다.
백준 ATM
test = int(input()) # 사람수 입력 버리는 값
time = input().split() # time 이라는 공백을 기준으로 리스트 값 추가
time.sort() # 정렬
add = 0 # 초기값
result = 0 # 초기값
for i in time: # time 값을빼와서 루프
add += int(i) # add 할 값
result += add # 매번 애드값을 더해 결과값 생성
print(result) # 출력
맨 처음 생각한 코드 사람의 수를 입력을 받고 사용할 대가 없어서 그냥 버렸는데 그것이 문제인지 결과값은 똑같은데 틀렸다고 나온다.
(수정)
정렬이 문자열로 정렬되기 때문에 10의 자리수가 되면 잘못된 결과가 나온다.
test = int(input())
time = list(map(int,input().split()))
time.sort()
add = 0
result = 0
for i in time:
add += int(i)
result += add
print(result)
그래서 저번에 배웠던 map 함수를 이용해 int 형으로 입력받은 각각의 값의 주소를 list로 묶어서 사용하였다.
그후 정렬을 하고 값을 구했더니 답이 되었다.