본문 바로가기

전체 글86

[백준 알고리즘/python] 백준 1065번 한수, 파이썬 백준 알고리즘 1065번 한수, 파이썬 이번에 푼 문제는 백준 알고리즘의 1065번 한수 문제이다. 파이썬으로 풀어보았다. 문제가 요구하는 것은, 정수 X가 각 자리수로 나뉘어 졌을 때, 등차수열을 이루면 그 수는 한수라고 하는데, N이라는 정수가 주어졌을때, N보다 작거나 같은 한수들의 개수를 구하라는 문제이다. ​ 이 문제를 잘 생각해보면 한자리 정수와 두자리 정수는 그냥 무조건 한수가 된다. 규칙을 찾고 말고 하려면 세 자리는 되어야 일정하게 차이가 난다는걸 알 수 있는데, 한자리와 두자리는 그냥 한수로 두고 코드를 짜면 된다. #생각1. 숫자가 주어지면 각 자리 수를 나눈다. #생각2. 각 자리 수를 리스트에 넣고, 인덱스의 0번과 1번의 차, 1번과 2번의 차가 같으면 True 다르면 False.. 2020. 3. 16.
백준 | 4673번 셀프넘버, 파이썬 입력은 없고 출력만 있는 문제이다. 정리하면 숫자고 ​ 입력은 없고 출력만 있는 문제. 정리하자면, 숫자가 주어지고, 그 숫자와 그 숫자의 각 자리수들을 합하는걸 반복하면 무한 수열을 만들 수 있는데, 이 때, 만들기 전의 숫자가 생성자이다. 이 생성자가 없는 숫자들이 있는데, 이 숫자들을 찾아서 10000이하까지 출력하는 문제 일단 한번 문제를 생각 해 봤다. ​ 결론은 생성자가 없는 숫자를 찾는건데, ​ 1부터 시작하는 수열의 다음숫자부터는 전부 생성자가 있는거고 1은 없는거고 2는 1 +1 로 만들어져서 제외가되고, 마찬가지로 3부터 시작하는 수열의 다음 숫자부터 전부 생성자가 있는거니까 싹 다 제외시키고 반복문을 돌리면 될거라고 생각했다. 내 생각을 글로 하나씩 정리 해 보았다. #생각1. 크기 .. 2020. 3. 16.
백준 | 4344번 평균은 넘겠지, 파이썬 이번 문제는 좀 간단했던거 같다. 간단해도, 머리속으로 차분히 정리해보는 습관을 들이려 한다. #생각1. 첫째 줄에는 테스트 케이스의 개수를 받는다. #생각2. 둘째 줄부터는 각 테스트 케이스 마다 학생의 수가 먼저 주어지고, N명의 점수가 추가로 주어진다. #생각3. 결과는 각 케이스마다 평균을 넘는 학생들의 비율을 반올림해서 소수 셋째자리까지 출력하는 것 #생각4. 받아온 각 케이스의 평균을 먼저 구한다. #생각5. 반복문을 돌리면서 평균보다 높으면 count에 1을 더한다. #생각6. 비율이니까 count의 수를 전체 학생수로 나누고 100을 곱하면 비율이 나온다. 내가 처음 작성한 코드는 아래와 같다. case_num = int(input()) case_list = list() i = 0 whil.. 2020. 3. 16.
백준 | 8958번 OX퀴즈, 파이썬 생각하는 시간이 점차 길어지기 시작하는 것 같다. 처음에 생각을 했을 땐, 문자열을 받고난 후, 문자열 합축으로 2O1X3O이런식으로 바꿔서 O앞부분의 숫자만 따로 떼어 낸 후 계산하려 했었다. 그렇게 코드를 짜면서 내려가는데, 이건 너무 비효율적인거같고, 코드가 많이 길어졌다. 그래서 나는 처음부터 다시 쪼개서 생각 해 보기로 했다. #생각1. OX문제의 점수를 계산하는 문제이다. #생각2. O는 1점 X는 0점을 기본으로 한다. #생각3. 연속으로 O를 맞으면 점수가 개수만큼 1점씩 더 늘어난다. #생각4. 문자열을 읽어들이면서 O는 1점을주고, 만약 다음에도 O면 추가점수를 변수로 또 만들어서 1점씩 늘린다 만약 X가 나온다면 추가점수를 0점으로 초기화를 시켜준다. 나는 이렇게 문제를 정리한 후 코.. 2020. 3. 16.
파이썬 | 문자를 아스키코드로 바꾸기 역시 백준을 풀다보니, 그냥 문자 하나를 받아와서 아스키코드로 바꾸는 문제가 있었다. 간단한 문제인데, 바꾸는 방법을 몰랐고, 또 까먹기 전에 글로 남겨보려 한다. string = ord(input()) print(string) a 97 Process finished with exit code 0 소문자 a를 입력하면 a에 해당하는 아스키코드인 97을 반환해준다. 자주 쓸 일은 없겠지만 알아둬야겠다. 2020. 3. 16.
파이썬 | 리스트의 일정 부분 합 구하기 리스트로 이루어진 수열에서 정해진 부분만 합을 구하려고 할 떄, 나는 슬라이싱을 생각 하지 못하고 그냥 반복문으로 돌리곤 했다. 반복문을 사용해도 되긴 하겠지만, 자꾸 머리속에서 인덱스가 헷갈려서 다른 방법이 없나 찾아봤다. 해답은, 슬라이싱 기능과 sum 메서드를 이용하는 것이었다. lst = [10, 20, 30, 40, 50] total1 = sum(lst[1:]) total2 = sum(lst[2:]) total3 = sum(lst[3:]) print("total 1 = ",total1) print("total 2 = ",total2) print("total 3 = ",total3) total 1 = 140 total 2 = 120 total 3 = 90 위의 코드처럼 sum 메서드에 어디부터 어.. 2020. 3. 16.
파이썬 | 소수점 나타내기 역시 늘 그렇듯이, 백준 알고리즘에서 천천히 풀어나가던 도중, 소수 셋째 자리까지 나타내라는 문제가 있었다. 0.3막 뭐 이런형태로 했었던거 같은데, 정확하게 기억이 나지 않아 검색하고 글로 남겨본다. 간단하다. num = 3/5 print(num) print("%0.3f"%num) 0.6 0.600 Process finished with exit code 0 위와 같은 형태로 나타내고 싶은 소수 자리수만큼 %0.N을 추가로 사용해 주면된다. 2020. 3. 16.
파이썬 | 리스트를 리스트에 복사할 때, 주의할 점 list 자료형에서 list 자료형으로 복사 할 때, 내가 실수 했던 것을 적어보려한다. lst = [1,3,4,2] copy = [] 이렇게 두개의 리스트가 주어지고, lst에서 copy로 복사하고 싶었다. copy = lst copy.sort() print("lst = ",lst) print("copy = ",copy) lst = [1, 2, 3, 4] copy = [1, 2, 3, 4] Process finished with exit code 0 위의 코드는 내가 제일 처음 썼던 코드인데, 이렇게 그냥 copy = lst를 써버리니까, copy의 내용을 바꾸게되면 원래있는 lst에도 영향이 갔다. 나는 원래 리스트는 그대로 두고싶었다. 이럴 때 해결방법은 아래와 같다. copy = list(lst).. 2020. 3. 15.
파이썬 | 리스트 생성, 생성과 동시에 크기지정 파이썬에서 빈 list를 생성하고 for문과 input함수를 통해 원소를 입력하려고 할 때, lst = list() for i in range(0,9): lst[i] = input() IndexError: list assignment index out of range 이렇게 인덱스에러가 나면서 입력이 정상적으로 되지 않는다. 잘 생각해보니까, 리스트라는게 생기기만 했지, 크기를 지정 해 주지 않아서 그런거 같은 느낌이었다. 크기를 생성과 동시에 지정해 주는 방법은 간단하다. lst = list(0 for i in range(0,9)) 이런식으로 크기를 지정 해 주면 된다. lst = list(0 for i in range(0,9)) for i in range(0,9): lst[i] = input() fo.. 2020. 3. 15.
파이썬 | map 함수를 쓰고, []로 접근하고 싶을 때 내가 예전 글에서 map을 사용해서 여러개를 입력받아, 바로 리스트에 저장하는 코드를 쓴 적이 있다. [코딩/python3] - 파이썬 | 입력을 받고 바로 리스트에 집어넣어 보자. 파이썬 | 입력을 받고 바로 리스트에 집어넣어 보자. 역시 백준 알고리즘을 풀던 중, 여러 개의 숫자를 띄어쓰기 기준으로 한번에 입력받아서 저장 할 방법이 필요했다. 군대가기 전 배운걸 생각해 봤을때, 여러 개의 숫자를 저장할 자료형은 list를 쓰면 될것 같았다.. god-gil.tistory.com 코드는 아래와 같다. lst = map(int, input().split()) 하지만 이것을 사용해서 lst의 원소에 [] index로 접근하려면 lst = map(int, input().split()) print(lst[1].. 2020. 3. 15.