본문 바로가기

프로그래밍/알고리즘13

백준 3711 파이썬 아이디어 학생들이 1명이면 구분 가능하니 무조건 1이 나오도록 하자 학생들이 2명 이상이면 학번을 받는 리스트와 학번을 m으로 나눈 나머지가 담긴 리스트의 길이를 비교해서 똑같으면 m을 출력하자 m으로 나눈 나머지가 담긴 리스트는 set으로 변경했다가 다시 리스트로 바꿔준다. set으로 바꿔주면 중복을 지울 수 있음. 하지만 len 함수의 사용이 불가능하기 때문에 다시 리스트로 변경해줌 import sys for _ in range(int(sys.stdin.readline())): li = [] n = int(sys.stdin.readline()) for __ in range(n): li.append(int(sys.stdin.readline())) if n == 1: print(1) else: cnt =.. 2022. 6. 13.
백준 2755 파이썬 (학점*성적)을 모두 더해서 (총 학점의 합)으로 나눠주면 된다. 성적마다 정해진 점수가 있기 때문에 딕셔너리로 코드를 작성하였다. 또 반올림 처리를 위해 round 함수를 사용하였다. 하지만 round 함수의 특성 상 반올림이 제대로 되지 않는다. round(4.5) -> 4 round(5.5) -> 6 소수점 앞의 숫자가 짝수면 소수점이 5 이상이어도 내려버리는 그런 특성이 있다. 그래서 이 문제를 푸는 다른 분들은 반올림 기능을 직접 구현하여 푸시는 분들이 대부분이었다. 나는 어떤 블로그에서 (10^-10)을 더하는 것을 보았고 그것으로 문제를 풀었다. hap=0 chong=0 score={'A+':4.3, 'A0':4.0, 'A-':3.7, 'B+':3.3,'B0':3.0,'B-':2.7,'C+'.. 2022. 1. 20.
백준 9093 파이썬 문제를 보자마자 떠오른 생각은, 문장을 리스트에 넣어서 reverse 함수로 뒤집어야하나, 슬라이싱을 해야 하나 였다. 결국은 슬라이싱을 선택했다. #최종 코드 v=[] n=int(input()) for i in range(n): v.append(input().split()) for i in range(0,n): for j in range(len(v[i])): print(v[i][j][::-1],end=' ') print() v라는 리스트에 입력을 한 줄씩 추가해줬는데, 나는 1차원 리스트에 들어가는 줄 알고 있었다. for를 이용해 리스트의 내용을 출력하고 싶었는데 아래처럼 코드를 짜면 'list index out of range'오류가 발생한다. for i in range(n): print(v[i]).. 2022. 1. 19.
백준 1110 파이썬 26 2+6=8 =>68 - 1 6+8=14 =>84 - 2 8+4=12 =>42 - 3 4+2=6 =>26 - 4 반복문은 계속 돌린다. => True로 해놔서 계속 돌아감 숫자를 입력한다. => n, check에 저장 십의 자리, 일의 자리를 분리해서 더한다. => temp에 저장 새로 생긴 숫자에서 십의 자리, 일의 자리를 더한 값에서의 일의 자리와 새로 생긴 숫자에서 일의 자리를 합친다. => new에 저장 횟수를 체크한다. => cnt에 1을 더함 n에 두 번째로 생성된 변수를 저장하고 처음 변수와 비교해서 같으면 반복문을 break로 탈출한다. 횟수를 출력한다. n = int(input()) check = n new = 0 temp = 0 cnt = 0 while True: temp = n//.. 2022. 1. 18.
백준 2480 파이썬 입력 3개를 리스트에 넣고 그것들을 비교하면서 연산하면 될 것이라고 생각했다. if 조건문을 엄청 많이 사용했다. a=list(map(int,input().split())) if a[0]==a[1]==a[2]: print(10000+a[0]*1000) elif a[0]==a[1]: print(1000+a[1]*100) elif a[1]==a[2]: print(1000+a[1]*100) elif a[0]==a[2]: print(1000+a[0]*100) else: print(max(a)*100) 다 만들고 다른 사람들이 작성한 코드 중, set()를 이용해서 작성한 것을 보았다. set는 list와 비슷하지만 중복을 허용하지 않는다. set를 이용하면 아주 간결하게 작성이 가능하다. 1. list에 입력 .. 2022. 1. 17.
백준 2530 파이썬 시간과 관련된 문제는 나눗셈을 이용하는게 가장 좋은 방법이라고 생각하였다. 먼저 조리 예상 시간을 그대로 입력 받은 현재 시간의 초에 더해버린다. 그리고 현재 시간의 초가 60이 넘어가면 분에 60을 나눈 몫(b+=c//60)을 더하고, 60을 나눈 나머지(c=c%60)를 초에 넣어버린다. 시간은 24가 넘어가면 0부터 시작해야 되기 때문에 시간을 24로 나눈 나머지(a=a%24)로 덮어 씌워버린다. a,b,c=map(int,input().split()) d=int(input()) c+=d if c>59: b+=c//60 c=c%60 if b>59: a+=b//60 b=b%60 if a>23: a=a%24 print(a,b,c) 2022. 1. 16.
728x90