-
[Python] 백준 : 반복문 모음집코딩테스트/백준 2024. 1. 27. 15:50
# 2,739 : 구구단
[문제 풀기 전 생각한 부분]
1. (사용자로부터 입력 받은 숫자 고정) * (1~9) = 결과
[my_code]N = int(input()) # 입력 받고 for i in range(1,10): # 1,2,3,4,5,..8,9 print("{0} * {1} = {2}".format(N,i,N*i))
[문제점]1. 분명히 잘 돌아가는 데 안된다. 검색을 해봐도 모르겠다..
2. 질문 게시판에 들어가보니 나랑 같은 케이스가 있었는 데, 예제랑 똑같이 나와야한다.
[문제점 해결]1. 예제랑 똑같이 나오기 위해 공백을 이용했다.
(before) print("{0}+{1}={2}".format(N,iN*i))
(after) print("{0} + {1} = {2}".foramt(N,i,N*i))
# 10,950 : A + B - 3
[문제 풀기 전 생각한 부분]
1. A + B 문제인데 -3은 왜 있는거지?
[my_code]T = int(input()) for i in range(T): # range(T) -> ex) T = 5, T=0,T=1,T=2,T=3,T=4 총 5번반복 A,B = map(int,input().split()) # A,B를 입력 받고 print(A+B) # A+B를 출력한다.
[문제점]1. 원래는 Line 2 에 A,B = map(int,input().split())을 넣었는 데 안됐다.
2. 그럼 for문에 넣어볼까?
[문제점 해결]1. 결론적으로 for문에도 input()을 넣어도 됐었다.
[B1] 한번에 입력을 받고 한번에 출력하려면?
# 방법 1 def main(): # 테스트 케이스의 개수 T를 입력받습니다. T = int(input("테스트 케이스의 개수를 입력하세요: ")) # 각 테스트 케이스에 대한 입력을 저장할 리스트를 초기화합니다. test_cases = [] # 테스트 케이스의 개수만큼 입력을 받습니다. for _ in range(T): # 각 테스트 케이스에서 두 정수 A와 B를 입력받고 리스트에 추가합니다. A, B = map(int, input("두 정수를 입력하세요: ").split()) test_cases.append((A, B)) # 입력받은 테스트 케이스에 대해 결과를 출력합니다. for A, B in test_cases: # A와 B를 더한 값을 계산하고 결과를 출력합니다. print(A + B) # 프로그램을 실행합니다. if __name__ == "__main__": main() # 방법 2 def main(): # 테스트 케이스의 개수와 각 테스트 케이스에 대한 입력을 한 번에 받습니다. test_cases = [tuple(map(int, input().split())) for _ in range(int(input("테스트 케이스의 개수를 입력하세요: ")))] # 각 테스트 케이스에 대해 결과를 출력합니다. for A, B in test_cases: # A와 B를 더한 값을 계산하고 결과를 출력합니다. print(A + B) # 프로그램을 실행합니다. if __name__ == "__main__": main()
# 8,393 : 합
[문제 풀기 전 생각한 부분]
1. 입력받고
2. 저장할 공간 만들어주고
3. range(n+1) n번 더해서 반복해주면 되겠다.
[my_code]n = int(input()) # 입력 받고 sum = 0 # Line 4를 위해 하나 만들어주고 for i in range(n+1): # n이 아니라 n+1한 이유는 Line4에서 더해줄건데..n=5이면0,1,2,3,4 4까지만더함. sum += i # sum = sum + i / print(sum) # 출력
[문제점]1. 결과값 6만 나와야 하는 데 그 과정이 전부 다 나오게 된 것이 문제다.
2. 문제에 1부터 n까지 합이라고 나와 있다.
3 # 입력값 0 # i=0일때 1 # i=1 3 # i=2 6 # i=3
[문제점 해결]1. for 문 안에 print가 존재해서 줄 맞춤하고 빼주었다. 내가 볼 땐 같은 내용인데 상당히 중요한 포인트같다.
2. range(1,n+1)로 수정
n = int(input()) sum = 0 for i in range(1,n+1): sum += i print(sum)
# 8,393 : 영수증
[문제 풀기 전 생각한 부분]
1. A+B-3 문제처럼 for문안에 input을 넣어야겠다.
2. 그리고 if 문으로 처리해야지.
[my_code]
stuff = int(input()) # 물건 총 금액 stuff N = int(input()) # 구매한 물건의 종류의 수 N for i in range(N): # N번 반복 a,b = map(int,input().split()) # 물건 가격 a와 개수 b를 공백을 두고 받는다. if stuff == a*b: # 만약 stuff(물건 총금액) = a*b print("Yes") # Yes 출력 else: # 그 외 No 출력 print("NO")
[문제점]1. 단순히 물건의 개수가 1개라면 되겠지만 그 이상이라면 안된다.
2. 8393의 합 문제 처럼 물건 종류의 수 N만큼 더해줘야한다.
[문제점 해결]1. Line 9 에서 total += a*b를 해주므로 해결
stuff = int(input()) N = int(input()) total = 0 for i in range(N): a, b = map(int, input().split()) # a: 상품의 가격, b: 상품의 수량 total += a * b # total = total + a * b if total == stuff: # total이 stuff와 같다면 print("Yes") else: print("No")
[느낀점]
백준 기본 문제 총 집합 시켜놓은 듯한 문제이다.
# 25,314 : 코딩은 체육과목 입니다
[문제 풀기 전 생각한 부분]
1. 4의 배수마다 long이 나
[my_code]
N = int(input()) # 입력 받고 ~ res='' # 저장될 공간 for i in range(N//4+1): # N//4+1 => N / 4 = x...y(x = 몫, y=나머지) x+1 / if N=4 i = 0,1,2 res = "long " * i # long * 0 , 1 print(res+"int")
[문제점]none
[문제점 해결]none
# 15,552 : 빠른 A+B
[문제 풀기 전 생각한 부분]
1. input() 대신 sys.stdin.readline()을 쓰면 좀 더 빠르게 출력하고 출력시간을 단축시키는구나.
2. rstrip()은 뭐지..
3. 나머지는 원래 했던거 처럼 하면 되겠다.
[my_code]
import sys # sys 모듈 읽어들이기 T = int(sys.stdin.readline().rstrip()) # input()과 사용방식 동일 for i in range(T): a,b = map(int,sys.stdin.readline().rstrip().split()) print(a+b)
[문제점or배운점]
# sys.stdin.readline() # 이 입력함수는 한 줄에 여러 입력 값을 받을 수 있다. # 사용하기 위해선 import sys 모듈을 불러야함. # readline()은 개행문자(줄 바꿈문자)를 포함하고 있음. (\n) # 그래서 문자열 마지막에 개행문자가 포함되어 출력됨. # rstrip() : 오른쪽 공백을 삭제 # lstrip() : 왼쪽 공백을 삭제 # strip() : 왼,오 공백을삭제
[참고사이트]https://yang-wistory1009.tistory.com/54
# 11,021 : A + B -7
[문제 풀기 전 생각한 부분]
1. 여태 배운거 하면 되겠는데..
2. import sys도 사용해봐야겠다.
[my_code]# code 1 T = int(input()) # 입력받고 ~ for i in range(1,T+1): # Case #1부터~ Case #T 까지 의미임 A, B = map(int,input().split()) # A B값 받아주고 print("Case #{}: {}".format(i,A+B)) # print 해준다. # code 2 import sys T = int(sys.stdin.readline().rstrip()) for i in range(1,T+1): A, B = map(int,sys.stdin.readline().rstrip().split()) print("Case #{}: {}".format(i,A+B))
[문제점]1. for문 자동완성 없이 작성할 때 : 까먹지 말자
2. map() 할 때도 구분자인 split()까먹지 말자.
# 11,022 : A + B -8
[문제 풀기 전 생각한 부분]
1. 11,021 문제랑 똑같다.
[my_code]import sys T = int(sys.stdin.readline().rstrip()) # 입력받으면서 오른쪽 공백 삭제. for i in range(1,T+1): A, B = map(int,sys.stdin.readline().rstrip().split()) print("Case #{}: {} + {} = {}".format(i,A,B,A+B)) # print 해준다.
# 2,438 : 별 찍기 - 1
[문제 풀기 전 생각한 부분]
1. 코딩은 체육과목입니다. 문제랑 같음.
[my_code]N = int(input()) for i in range(1,N+1): star = "*" * i print(star)
# 2,439 : 별 찍기 - 2
[문제 풀기 전 생각한 부분]
1. reverse나 뭐 이런 단축키 없나?
2. 그냥 노가다인가
[my_code]N = int(input()) # sol 1 : 1부터 N까지를 기준으로 진행 for i in range(1,N+1): print(" "*(N-i)+"*"*i) # sol 2 : 0부터 N-1까지를 기준으로 진행 for i in range(N): print(" "*(N-i-1) + "*"*(i+1)) # sol 3 : 전체 N에서 오른쪽 정렬을 하는 .rjust(N) 사용 for i in range(N): star = "*"*(i+1) print(star.rjust(N))
[문제점or배운점]• 전체가 n 이라고 할 때 각 위치 정렬 함수 오른쪽 정렬 : .rjust(n) 가운데 정렬 : .center(n) 왼쪽 정렬 : .ljust(n)
[참고사이트][Bonus]
B1
입력예제) 5 출력예제) ***** **** *** ** *
N = int(input()) for i in range(N,0,-1): # N~1까지 / -1: 역순 star = "*" * i print(star)
# 10,952 : A + B - 5
[문제 풀기 전 생각한 부분]
1. A + B는 쉬운 데, 여러개의 테스트 케이스는 몇개지? 입력의 마지막에 0 0 을 주면 끝내는 걸 만들어야되나
[my_code]
for i in range(81): # range(81)의 이유 : 0<A,B<10 이라 총 81의 경우의 수 존재한다고 생각했음. A,B = map(int,input().split()) # A,B 입력을 받고 res = A+B # A + B = res if res==0: # res == 0인 경우는 둘다 0 인 경우 뿐. print("") else: # 나머지의 경우에는 A + B 를 한다. print(res)
[문제점]1. range(81)까지이니 81번 까지 할것이다.
2. res == 0 이면 끝나야 하는 데 " " 값을 출력한다.
[문제점 해결]while True: # while True : 무한히 반복하는 무한 루프 A,B = map(int,input().split()) # 입력받고 if A==0 and B==0: # A=0 이면서 B=0일 때 / and break # 무한루프 break 끝냄. else: print(A+B) # 그 외 A+B를 출력.
[참고사이트]
https://pythonmaster.tistory.com/32
*while 문에 대한 설명
#10,951 : A + B - 4
[문제 풀기 전 생각한 부분]
1. 무한히 반복하면 되니깐 반복값이 정해져있는 for문보단 while문을 활용
2. A+B-5 문제에서 break 부분을 빼면되겠다.
[my_code]# 1번째 시도 while True: A,B = map(int,input().split()) print(A+B) # 2번째 시도 import sys while True: A,B = map(int,sys.stdin.readline().split()) print(A+B)
[문제점]
1. 맞은 거 같은데 "런타임 에러 (EOFError)"가 떴다.
2. 그러면 input()을 sys.stdin.readline()으로 바꾸면 효과가 있으려나?
3. 바꾸어도 "런타임 에러(ValueError)"가 떴다.
[문제점 해결]
1. try-except 구문을 활용 : 예외 처리를 위한 구문이다.
2. try 블록 안에 실행할 코드를 넣고, 예외가 발생할 경우 except 블록에서 처리
while True: try: A,B =map(int,input().split()) print(A+B) except: break
[참고사이트]
[파이썬 문법] 2-3. 반복문 - while문(break, try-except)[초보용] - 질문으로 공부하는
오늘.ssam) 지난 2-2에서는 for문-break-continue에 대해서 알아보았습니다. 오늘은 또 다른 반복문 while에 대해서 알아보려 합니다. Q1.나) while문에 대해서 설명해 주세요 A1.ssam) while문은 1)조건식이 참(T
it-plus.tistory.com
[반복문을 마치며]
이렇게 풀면서 감을 익히고 감 조금 익히면 기술면접 대비식으로 풀이 하겠습니다.
+ 위 모든 정보는 잘못된 정보를 제공할 수 있으니, 공부에 참고만 부탁드립니다.
+ 틀린 부분 | 여기서 더 생각하면 좋을 부분도 댓글로 적어주시면 감사하겠습니다.'코딩테스트 > 백준' 카테고리의 다른 글
[Python] 백준 : 1차원 배열 (3) 2024.03.18 [Python] 백준 : 조건문 모음집 (두 수 비교하기 이후부터) (1) 2024.01.27 [Python] 백준 : 조건문 1,330번, 두 수 비교하기 (0) 2024.01.22 [Python] 백준 : 입출력과 사칙연산 2,588번, 곱 (1) 2024.01.22 [Python] 백준 : 입출력과 사칙연산 10,171번, 고양이 (0) 2024.01.22