알고리즘 6

중복된 값 개수 출력하기

밑에는 잡설이고 가로선 이후 본론입니다. 오랜만에 글쓰게 됐습니다. 요새 학원에서 안드로이드를 배우고 있는데 엄청난 속도로 진도를 나가고 팀플까지 해서 따라가느라 여유가 없다..는.... 유튜브의 알고리즘이 알고리즘에 대한 영상으로 안내해줘서 살짝 맛봤습니다. 그동안은 적은 용량을 차지하고, 빠르게 실행되는 코드가 좋은 줄 알았지만, 짧은 코드보단 가독성이 좋은 코드가 좋은 방향이였습니다. 책으로 변수 이름 짓는 방법까지 나온 거 보면요. 막상 해보니 어려워 저도 읽어봐야겠습니다. 팀 프로젝트를 하면서 많은 걸 배웠습니다. 정해져있는 시간, 변수 이름, 깃허브도 써봤습니다. 변수 이름에 1, 2, 3 붙으니 많이 답답하더군요. 코드를 날리면서까지 깃허브를 써본 건 좋았습니다. 역시 직접 써봐야 잘 익혀집..

알고리즘/Python 2021.06.20

더하기 사이클, list와 숫자로 풀이

문제 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자. 26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다. 위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다. N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오. 예제 입력 ..

알고리즘/Python 2021.05.18

입력받은 문자열의 최소, 최댓값 구하기

이번에는 간단하게 제가 짠 코드를 올리겠습니다. 문자열 곱하기 때 봤던 다른 분 코드를 응용했습니다. 백준 문제에서는 단계별로 풀어보기 while안에 있었습니다. 문제) 첫 번째에 정수 N이 입력되면 두 번째는 N개의 정수를 공백으로 구분해서 입력된다. 최솟값과 최댓값을 공백으로 구분해 출력하시오. 예제 입력 출력 5 7 35 20 10 35 30 7 input()# 없어도 됨 n = list(map(int, input().split(' ')))# 두 번째 입력 print(min(n), max(n))# 최솟값, 최댓값 궇하기 input >>> while을 사용하지 않으면 첫 번째 N값은 필요하지 않아서 정의하지 않았습니다. input().split(' ') >>> 문제 특성상 문자열로 입력되어서 공백을 ..

알고리즘/Python 2021.05.11

for문제를 range, join, map을 활용해서 풀기

문제) 자연수 N이 주어졌을 때, N부터 1까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오. 입력) 첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다. 출력) 첫째 줄부터 N번째 줄 까지 차례대로 출력한다. 예제 입력 출력 5 5 4 3 2 1 저는 이 문제를 보았을 때 알고리즘 단계에 for문 안에 있어서 그대로 하면 되겠다 싶었습니다. For i in range(int(input()), 0, -1): print(i) 나름 용량 적게 먹으라고 짧게 작성했는데 더 효율적인(?) 코드를 보았습니다. n = range(int(input()),0,-1) print('\n'.join(map(str,n))) 풀어보면(임의로 a, b 정의했습니다) >>> a = int(input()) a = 5 >..

알고리즘/Python 2021.04.26

문자열 곱하기

구글 검색으로 파이썬을 배우면서 봤던 연산자가 있습니다. *인데요. 파이썬 말고도 계산기나 다른 여러 곳에서도 곱하기 기호로 쓰입니다. 파이썬에서는 다른 뜻으로 쓰일 때도 있지만, 글에서는 연산자로 살펴보겠습니다. 숫자를 곱할 때 쓰는 연산자지만 문자열(str)이나 list에도 사용 가능합니다. 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제. 첫째 줄에 N이 입력됩니다. 이렇게 쓸 수도 있지만, a = int(input()) n = '' for i in range(a): n = n + '*' print(n) a = int(input()) for i in range(a): print('*' * (i+1)) *를 이용해서 작성하면 코드 속도가 쬐끔 더 빠릅니다. # 참고 ..

알고리즘/Python 2021.04.18

eval, exec 함수

알고리즘 문제를 풀면서 다른 분들은 어떻게 코드를 썼는지 둘러보던 중에 유독 느린 코드가 있어서 들어가봤습니다. exec함수에다가 한 줄로 쓴 코드였습니다. 느려서 문제라기보단 이렇게 쓸 수도 있구나 싶었습니다. 검색하니 eval도 같이 나와서 이해한 내용만 같이 정리해봤습니다. eval 함수는 변수가 포함된 식(expression)을 문자열(string) 형태로 받아 작동합니다. a0 = 'Hello' a1 = 'World!' for i in range(2): print(eval('a' + str(i))) ------------------------------ Hello World! exec 함수는 객채(object)를 문자열 형태로 받아 작동합니다. exec('a = 1') 언급한 문제는 먼저 예시가..

알고리즘/Python 2021.04.13