< 백준 10951 > 😑
문제는 간단해 보인다.
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
그렇다고 내가 풀 수 있는건 아니다. ㅎㅎ
< 실패한 내 코드 >
일단 위와 같은 코드를 짰으나 런타임 에러가 떴다.
그리하여
이런 코드를 짜봤지만 역시나 런타임 에러.
혹시 ' 0 < A, B < 10 ' 이 조건을 만족해야하나 싶어서
위 코드를 시도해봤지만, 역시나 런타임 에러다.
위 코드들의 문제점은 loop를 끝내주지 못한다는 것이고, loop를 끝내지 못하는 이유는 테스트 케이스 개수가 정해져 있지 않기 때문이다.
이 경우 어찌해야 할 지 내 머리로는 알 수가 없어서 그냥 구글 슨생님에게 물어봤다.
검색해보니, 테스트 케이스 개수가 정해지지 않은경우 EOF(End of File)을 만날 때까지 while문을 반복하게 하면 된다.
아래는 검색해서 찾은 < 정답 코드 >
예외처리를 숙지하고, 다른 날 새 마음으로 다시 풀어보자
< 백준 10818 > 😀
이 문제는 첫 제출에서 '맞았습니다'를 받았다.
코드 설명 :
1번 항에서 입력 값 N을 받아, 그 다음 줄에서 N개 만큼 입력 값을 더 받아야 한다.
2번 항은 '특정 개수만큼 입력 값을 받는' 코드다. 자주 쓰이는 것 같으니까 잘 봐두자.
< 백준 2562 > 😀
코드 설명 :
- 먼저 dict( ) 함수를 이용해서 {인덱스 넘버 : 정수} 와 같이 key, value를 가진 딕셔너리 d를 만든다.
- 9개의 입력값을 하나씩 받아 빈 딕셔너리 d를 하나씩 채워주는 방식으로 d를 완성시킨다.
- 6번 항이 좀 복잡해보이는데, 9개의 서로 다른 자연수들 중 최댓값을 찾기 위해 d.values()를 작은 순서대로 sorted 하고, [-1] 인덱스로 가장 마지막 값 즉, 가장 큰 값을 호출한 것이다.
- 8번 항부터 시작하는 for 문은 딕셔너리에서 특정 항목의 값으로 해당 항목 값의 키 값을 찾는 방법이다. 여러모로 유용할 것 같으니 잘 기억해두자.
< 다른 사람의 코드 >
검색해보니 더 간단하게 푸는 방법도 많다.
내가 한 것처럼 딕셔너리를 만드는 게 아니라 그냥 리스트에서 인덱스를 찾는 방법이다.
다음은 UC공대 출신 미국에서 살아남기 님의 코드를 가져온 것이다.
index( ) 함수 설명
< 백준 2577 > 😀
문제 :
세 개의 자연수 A, B, C가 주어질 때 A×B×C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.
나름 수월하게 풀었다.
< 내 코드 >
문제에서 A, B, C를 각 줄에 따로 입력하라고 했기 때문에 map( ) 을 쓰지 않는다.
또 곱셈을 하기 위해 int로 바꿔줬던 것을 곱셈 후 결과값 s가 된 후 다시 문자열(str)으로 바꿔줬다.
< 백준 3052 > 😀
코드 설명 :
나머지 값들이 모인 remain 리스트를 만들어 출력하면 [39, 40, 41, 0, 1, 2, 40, 41, 0, 1] 이다.
40, 41, 0 등이 중복으로 등장한다.
문제에서 '서로 다른 값'이 몇 개 있는지 구하라고 했으므로 리스트 내 중복 항목을 지우는 게 관건이다.
중복을 지우기 위해 5번 항에서 set( ) 함수를 써서 집합으로 변환시켰다. 집합에는 중복 값이 존재하지 않으므로 자연스럽게 중복을 지울 수 있다.
문제는 간단해 보인다.
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
그렇다고 내가 풀 수 있는건 아니다. ㅎㅎ
< 실패한 내 코드 >
1 2 3 4 5 6 7 8 9 | check = True A, B = map(int, input().split()) while check: if [A, B] != None: #입력값을 받은 경우: print(A+B) A, B = map(int, input().split()) if [A, B] is None: #입력값 받지 않은 경우 check = False |
일단 위와 같은 코드를 짰으나 런타임 에러가 떴다.
그리하여
1 2 3 4 5 6 7 | while True: A, B = map(int, input().split()) if [A, B] != None: print(A+B) A, B = map(int, input().split()) elif [A, B] is None: break |
이런 코드를 짜봤지만 역시나 런타임 에러.
혹시 ' 0 < A, B < 10 ' 이 조건을 만족해야하나 싶어서
1 2 3 4 5 6 7 | A, B = map(int, input().split()) while 0 < A < 10 and 0 < B < 10: print(A+B) A, B = map(int, input().split()) if 0 >= A or A >= 10 or 0 >= B or B >= 10: break |
위 코드를 시도해봤지만, 역시나 런타임 에러다.
위 코드들의 문제점은 loop를 끝내주지 못한다는 것이고, loop를 끝내지 못하는 이유는 테스트 케이스 개수가 정해져 있지 않기 때문이다.
이 경우 어찌해야 할 지 내 머리로는 알 수가 없어서 그냥 구글 슨생님에게 물어봤다.
검색해보니, 테스트 케이스 개수가 정해지지 않은경우 EOF(End of File)을 만날 때까지 while문을 반복하게 하면 된다.
아래는 검색해서 찾은 < 정답 코드 >
1 2 3 4 5 6 | try: while True: A, B = map(int, input().split()) print(A+B) except : # 예외 경우 즉, EOF(End Of File)을 만난 경우 exit() # 프로그램 종료 |
예외처리를 숙지하고, 다른 날 새 마음으로 다시 풀어보자
< 백준 10818 > 😀
이 문제는 첫 제출에서 '맞았습니다'를 받았다.
1 2 3 | N = int(input()) L = list(map(int, input().split())) print(sorted(L)[0], sorted(L)[-1]) |
코드 설명 :
1번 항에서 입력 값 N을 받아, 그 다음 줄에서 N개 만큼 입력 값을 더 받아야 한다.
2번 항은 '특정 개수만큼 입력 값을 받는' 코드다. 자주 쓰이는 것 같으니까 잘 봐두자.
< 백준 2562 > 😀
문제 :
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.
비교적 수월하게 풀었다.
< 정답인 내 코드 >
1 2 3 4 5 6 7 8 9 10 | d = dict() #{인덱스 넘버:정수} for i in range(1, 10): d[i] = int(input()) print(sorted(d.values())[-1]) for j, n in d.items(): if sorted(d.values())[-1] == d.get(j): print(j) |
코드 설명 :
- 먼저 dict( ) 함수를 이용해서 {인덱스 넘버 : 정수} 와 같이 key, value를 가진 딕셔너리 d를 만든다.
- 9개의 입력값을 하나씩 받아 빈 딕셔너리 d를 하나씩 채워주는 방식으로 d를 완성시킨다.
- 6번 항이 좀 복잡해보이는데, 9개의 서로 다른 자연수들 중 최댓값을 찾기 위해 d.values()를 작은 순서대로 sorted 하고, [-1] 인덱스로 가장 마지막 값 즉, 가장 큰 값을 호출한 것이다.
- 8번 항부터 시작하는 for 문은 딕셔너리에서 특정 항목의 값으로 해당 항목 값의 키 값을 찾는 방법이다. 여러모로 유용할 것 같으니 잘 기억해두자.
< 다른 사람의 코드 >
검색해보니 더 간단하게 푸는 방법도 많다.
내가 한 것처럼 딕셔너리를 만드는 게 아니라 그냥 리스트에서 인덱스를 찾는 방법이다.
다음은 UC공대 출신 미국에서 살아남기 님의 코드를 가져온 것이다.
1 2 3 4 5 6 | num_list = [] for i in range(9): #0~8까지 총 9개 num_list.append(int(input())) print(max(num_list)) #최댓값 구하는 함수 max() print(num_list.index(num_list)+1) #0부터 시작하니 인덱스 값에 1을 추가 |
index( ) 함수 설명
![]() |
출처: 위키닥스 <점프 투 파이썬> |
< 백준 2577 > 😀
문제 :
세 개의 자연수 A, B, C가 주어질 때 A×B×C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.
예
A = 150, B = 266, C = 427 이라면
A × B × C = 150 × 266 × 427 = 17037300 이 되고,
계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.
나름 수월하게 풀었다.
< 내 코드 >
1 2 3 4 5 6 7 | A = int(input()) B = int(input()) C = int(input()) s = str(A*B*C) for i in range(0, 10): print(s.count(str(i))) |
문제에서 A, B, C를 각 줄에 따로 입력하라고 했기 때문에 map( ) 을 쓰지 않는다.
또 곱셈을 하기 위해 int로 바꿔줬던 것을 곱셈 후 결과값 s가 된 후 다시 문자열(str)으로 바꿔줬다.
< 백준 3052 > 😀
< 내 코드 >
1 2 3 4 5 | remain = [] for i in range(10): n = int(input()) remain.append(n%42) print(len(set(remain))) |
코드 설명 :
나머지 값들이 모인 remain 리스트를 만들어 출력하면 [39, 40, 41, 0, 1, 2, 40, 41, 0, 1] 이다.
40, 41, 0 등이 중복으로 등장한다.
문제에서 '서로 다른 값'이 몇 개 있는지 구하라고 했으므로 리스트 내 중복 항목을 지우는 게 관건이다.
중복을 지우기 위해 5번 항에서 set( ) 함수를 써서 집합으로 변환시켰다. 집합에는 중복 값이 존재하지 않으므로 자연스럽게 중복을 지울 수 있다.
0 Comments
Post a Comment