프로그래밍 스터디 #3 (Baekjoon 4673, 11399)

백준 셀프넘버

imageimage

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로 묶어서 사용하였다.

그후 정렬을 하고 값을 구했더니 답이 되었다.