[백준] 1차원 배열, 함수

ddalkigum·2020년 12월 1일
2

백준

목록 보기
2/2
post-thumbnail

백준 2577 숫자의 개수

문제

https://www.acmicpc.net/problem/2577

풀이

a = int(input())
b = int(input())
c = int(input())

mul = str(a * b * c)
for i in range(10):
    print(mul.count(str(i)))

파이썬의 함수를 이용해서 풀어 주었고,

처음 문제를 보고는 count함수를 사용할 생각을 못했다.
처음에는 for문을 돌리는 함수를 만들어서 각자리수의 숫자를 하나하나 세줘야 하나
생각했는데 앞에 있던 문제도 마찬가지지만, 파이썬 내장함수를 활용하는게 좋은 방법 아닐까 싶다


백준 3052 나머지

문제

https://www.acmicpc.net/problem/3052

풀이

arr = [0] * 10
num_arr = []

for i in range(10):
    arr[i] = int(input())

for j in arr:
    num_arr.append(j % 42)

num_arr = set(num_arr)
print(len(num_arr))

숫자를 10개 입력받으니까 10개의 0이 가득가득한 배열을 만들어주고 시작

그렇게 10개의 배열에 새로운 숫자를 입력 해주고,

나머지 중에 중복은 없애야 하므로, set로 만들어 중복을 제거 해주었다.

헿....


백준 1546 평균

문제

https://www.acmicpc.net/problem/1546

풀이

N = int(input())
M = [0] * N
M = list(map(int, input().split()))
value_arr = []
max_value = max(M)

for i in M:
    num = i / max_value * 100
    value_arr.append(num)
score = sum(value_arr) / len(value_arr)
print(score)

아하~ 이 친구도 배열 만들기
위에 문제와 비슷하다 ...

배열의 함수들을 사용해서 풀어주면 된다.
최대값을 구해주는 max를 이용했고,
숫자들을 연산한 후에 배열에 담아 평균을 구해줬다.


백준 4673 셀프 넘버

문제

https://www.acmicpc.net/problem/4673

풀이

numarr = []
self_number = []
co_num = []

for n in range(10000):
    numarr.append(str(n))

for i in numarr:
    num = int(i)
    for j in i:
        num += int(j)
    self_number.append(num)

(set(self_number))
for k in range(10000):
    if k in self_number:
        pass
    else:
        co_num.append(k)
for s in co_num:
    print(s)

그저... 너무 무식하게 푼거 같다는 생각 ...
사실 문제를 보고 처음에는 끝에서부터 계산을 해야하나?
생각하다가 아니다 싶어 바로 바꿧음

문제가 푸는 방법이 많이 있겟지만,
내가 선택한 방법은 1부터 시작해서 10000까지
문제에 나온 방법대로 다 더해준 숫자를 리스트에 넣고

중복을 제거하기위해 set...

세트를...

아무튼... 세트를 만들어 중복을 없애고
10000까지의 숫자중에 아닌 숫자들을 다시 리스트에 담고
출렷해주었다.

보면 알겠지만 비효율적이긴 하다
개선해보겠습니다... 😁


백준 1065 한수

문제

https://www.acmicpc.net/problem/1065

풀이

N = int(input())

if N < 100:
    value = N
else:
    value = 99
    for i in range(100, N + 1):
        num = str(i)
        value_one = int(num[2]) - int(num[1])
        value_two = int(num[1]) - int(num[0])
        if value_one == value_two:
            value += 1
print(value)

한수라는게 처음에 어떻게 이해를 해야하지 하면서 검색을 했는데
2자리 숫자까지는 모든 숫자간의 간격이 등차수열을 이루기 때문데
모두 한수라고 한다.

보면 알겠지만 이 문제 또한 무식한 방법으로 풀었다.
정답은 맞췄지만... 찝찝하다

직관적인 풀이 방법이긴 하지만 더 큰숫자를 구하게 된다면
비효율 적인 식이 나올 것이다

너무 직관적인 풀이라 해설을 어떻게 해야할지 모르겟다

profile
딸기검 -본캐🐒 , 김준형 - 현실 본캐 🐒

0개의 댓글