프로그래밍 26

[백준 #4344][Python] 평균은 넘겠지

문제 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다. 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다. 풀이 우와... 제일 첫번째 고비... 둘째줄(이후)부터 맨처음에 학생 수와 점수가 같은 줄에 주어지는 구나... list를 미리 만들어서 n, s_list = map(...) 으로 해볼까 했는데 혹시나 했던 마음처럼 역시나였다. 다른 방법이 있겠..

[백준 #8958][Python] OX퀴즈

문제 "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다. "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다. OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오. 풀이 연속으로 문제를 맞추면 점수가 늘어난다고?! 내가 문제를 푸는 입장이면 개꿀이지만 채점하는 입장이 되어 프로그램을 쓰려니 막막했다... 내가 백준 문제를 풀때의 마음가짐은... 아이디어만큼은 내가 짜보고... 함수 등 문법적인 부분은 구글의 도움을 받더라도 내 아이디어로 한번 풀어보자. 이다. (그러니까 틀렸습니다!..

[백준 #3052][Python] 나머지

문제 두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오. 풀이 list는 [] !!! 기억하자!!! 처음에 list(10)으로 썼다가 오류났다 ㅎㅎㅎ 나 진자 개 멍청해 ㅎㅎㅎ num = [] for i in range(10): n = int(input()) num.append(n%42) s = set(num) print(len(s)) 10개의 숫자를 입력 받고... 42로 나눈 나머지를 계산해서 곧바로 리스트에 추가(append함수)한다!! 오늘의 포인트!!! : s..

[백준 #2577][Python] 숫자의 개수

문제 세 개의 자연수 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번 쓰였다. 풀이 a= int(input()) b= int(input()) c= int(input()) mul = list(str(a*b*c)) for i in range(10): print(mul.count(str(i))) 제일 먼저... 고민했던 건, a*b*c 의 결과값을 각 자리수로 나눠서 list에 넣지? 였다. 감사..

[백준 #1546][Python] 평균

문제 세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다. 예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다. 세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오. 풀이 n = int(input()) llist = list(map(int, input().split())) lmax = max(llist) for j in range(n): llist[j] = (llist[j]/lmax*100) avg = sum(llist) / n print(avg) ..

[백준 #1110][Python] 더하기 사이클

문제 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자. 26부터 시작한다. 26의 사이클의 길이는 4이다. N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오. 풀이 처음 아이디어였다... while 무한 루프를 돌면서 한번 돌때마다 num을 업데이트 시키고 cnt를 1씩 추가한다. 그리고 num과 제일 처음 입력 숫자를 비교해서 동일해지면 break! n = int(input()) num = n c..

[백준 #10951][Python] A+B -4

문제 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 풀이 인데... 이제 이거는 아까와 다르게 입력의 마지막을 스스로 체크해야한다. 난 이거에 대한 내용을 배워본 적이 없어서 아... 코드를 검색해봐야하나 싶었지만 문제 설명(?)에 EOF라는 힌트를 발견하고 "EOF python"이라고 검색해봤다. EOF는 End Of File이라는 뜻으로 더이상 읽을 수 있는 데이터가 없다는 걸 의미한다고... 위키가 알려줬다. python에서는 try-except 문으로 EOF를 처리할 수 있단다! try-except는 try 코드를 수행하다가 오류가 발생하면 except로 이동해 코드를 수행한다는... 그런 의미로 대충 받아들였다. while True: try: a, b = map(i..

[백준 #10952][Python] A+B -5

문제 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 풀이 인데 while문을 사용해야하는 조건이 붙었고, 0 0을 입력받으면 종료한다. 어제 풀었던 문제와 달리 Test Case에 대한 정보가 없기 때문에 0 0이 입력되는 걸 계속 확인해줘야한다. 바로 생각난... 무한루프 while문! while True: a, b = map(int, input().split()) if(a==0 and b==0): break else: print(a+b) a와 b에 모두 0이 들어올 때까지... 계속 더해주는거다. 다행히 어제 블록암호 운용모드 라이브러리 코드 수정을 조금하다가 무한루프를 쓸 일이 생겨서 찾아본 게 바로 떠올랐다. 사실 나 매번 python 무한루프 검색했는데... 이제 ..

[백준 #11021][Python] A+B -7

문제 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 풀이 오늘은... 멍청하게 a+b를 괄호 밖에 꺼내서 썼다가 틀렸다 그래서 혼자 당황해 했다. 나도 모르는 사이에 쟤는 언제 튀어나온 걸까... 분명 괄호 안에 잘 넣어뒀다 생각했는데... 밑은 물론 정답 코드다. t = int(input()) for i in range(t): a, b = map(int, input().split()) print('Case #%s: %s'%(i+1, a+b)) 테스트 케이스를 t로 받고, 테스트 케이스의 수만큼 반복해주면서 더할 숫자를 입력 받는다. 문제에서 출력을 Case #number: 로 예쁘게 출력하라고 했다. 밑줄 친 부분의 출력만 바뀌기 때문에 format을 사용해서 %s로 바뀌..

[백준 #10871][Python] X보다 작은 수

문제 정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오. 풀이 입력이 첫째 줄과 둘째 줄로 나누어지고, 한 줄에 여러 변수를 받고 있길래 바로 map과 split을 떠올렸다! 공부한 보람이 있는 듯! 수열 A라고 해서 list로 받아주었다. list의 길이는 이미 N이라고 알고 있기 때문에 range(N)을 통해 하나씩 비교하기로 했다. X보다 작은 수를 순서대로 "공백"으로 구분한다고 해서 end=" " 조건을 추가했다. N, X = map(int, input().split()) A = list(map(int, input().split())) for i in range(N): if X > A[i]: print(A[i], end=" ..