TIL

93일차(모험 2일차)

haedal-uni 2021. 12. 14. 23:59
728x90

2021.12.14 

오전 10시경 Spring 강의

 

그동안 프로젝트를 하면서 밀린 Spring를 듣게 되었다.

프로젝트 이전에는 감을 잡지 못했는데 프로젝트를 하면서 코드에 익숙해진 것인지 모르겠으나

이해가 되기 시작했다.

 

그런데 프로젝트 하면서 작성한 흐름과 강의 코드의 흐름과는 다른게 몇 가지 있어서

튜터님께 여쭤보았고 이를 T.S.L에 기록했다.

 

 

 

 

오후 2시경 [백준 알고리즘] 1037 문제를 맞닥뜨렸다..!

 

 

위 출력 예제를 보고 n, k = map(int, input().split()) 이러한 코드를 써야하나 생각이 들었다.

 

어떻게 풀어야 할지 틀을 짜고 작성하는게 코드 짜기에 더 좋을 것 같아서 풀어서 적어봤다.

 

입력한 수 만큼 입력 값을 받는다.
두번 째 입력 값이 result의 약수
약수들을 보고 그 수를 찾아내는 것

 

처음엔 최소공배수인가? 싶었다.

 

a, b, c, d 가 있으면 a와 b와 c와 d... 의 최소 공배수를 어떻게 구하지 싶었다.

몇으로 나누고 곱하고 하면 코드가 복잡해질 것 같다는 생각이 들어

정답이 어떻게 50%가 뜰까 제한시간 1시간 중 30분은 어떻게 작성해야하나 고민만 했다.

 

감이 잘 잡히지 않아서 실제 예제 입력과 출력 예시 중 하나를 가져와서 다시 살펴봤다.

 

3 4 2 12 6 8
-> 24

이 예제를 보고 가장 작은 수 x 가장 큰 수 로 하면 되는건가 싶었고

다른 예제들도 이 공식에 부합했다.

그리고 바로 코드를 작성했다.

 

 

양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 라는 문제가 있어

 

 

예제에 해당되는 출력 값을 내기 위해 2보다 같거나 작으면 그 수를 더 곱하는 것으로 작성했다.

 

N = int(input())
num = map(int, input().split())
a=[]
for i in num :
    a.append(i)

result = max(a) * min(a)
if result <= 2 :
    result * result
print(result)

 

 

생각해보니 처음 받는 input 값은 쓰지도 않는다는 것을 알아서 변수 지정을 없앴다.

 

input()
num = map(int, input().split())
a=[]
for i in num :
    a.append(i)

result = max(a) * min(a)
if result <= 2 :
    result * result
print(result)

 

1시간 이라는 시간 내에 나는 정답을 제출하였고 

팀원은 어제에 이어 오늘도 시간내에 풀지를 못했다고 아쉬워했다. 

 

그 이유는 나처럼 어떻게 풀어야할지 고민하다가 약수가 무엇인지에 대해 검색해보고

 

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

 

 

출력 부분에서 32비트가 무엇인지 살펴보다가 끝났다고 했다.

 


Best code

 

정렬 후 첫번째와 가장 마지막 값 이용

b = int(input())
a = list(map(int, input().split()))
a.sort()
print(int(a[0])*int(a[-1]))

 

 

최솟값과 최댓값 이용

input()
*a,=map(int,input().split())
print(max(a)*min(a))

 

*a,=map(int,input().split())  코드 해석

-> *a, 되면 a 에 리스트 전체가 할당된다

 

 

파이썬의 Asterisk(*) 이해하기

 


best code를 보고 조건문 처리를 안했다는 것을 알아서 

숫자가 하나인 경우 최솟값과 최댓값이 하나이기 때문에

어차피 같은 수로 곱한다는 것을 알아서 주석처리 했다.

 

input()
num = map(int, input().split())
a=[]
for i in num :
    a.append(i)

#result = max(a) * min(a)
# if result <= 2 :
#     result * result
print(max(a) * min(a))

 

이렇게 해서 제출 했더니 주석 처리하기 전보다 시간 소요가 더 크게 나왔다.

그래서 주석 처리를 하기 전 코드가 더 낫다는 것을 알게 되었다.

 

 

1번이 주석 처리 하기 전이고 2번이 주석처리 하고 난 후의 코드이다.

 

 

 

 

9시경

 

Spring을 배우면서 알게 된 점들, 튜터님께 질문한 것들을 T.S.L에 기록했다.

 

 

 

 

10시경

 

노션에 용어정리를 하였다. 

오늘은 Internet 부분에서 What is hosting? 부분을 작성했다.

 

믿을 만한 곳에서 가져오기 위해 mdn, 생활코딩을 참고하였고 

아래는 생활코딩에서 작성된 글로 요약해봤다. 

 

인터넷에 연결된 컴퓨터 하나 하나를 호스트라고 하고 이런 컴퓨터를 빌려주는 사업을 호스팅이라고 한다.

 

 

 

 

11시 이후 

 

나는 오늘 Spring 공부한 것 외의 것들을 이곳에 기록을 하면서 정리하고 있다. 

 

오늘은 강의 내용이 Spring 보다는 html/css, javascript에 초점이 맞춰져 있어서

Spring 공부를 많이 못한 것 같아 내일은 오늘보다 10걸음 더 나아가고 싶다.

 

 

- 모험가 haedal

 

728x90