cording test

LV.0 : ["세균 증식"], ["OX 퀴즈"]

JM Lee 2023. 3. 22. 12:01
728x90

첫 프로그래머스 테스트로, 아직 실전이 무서운 햇병아리기에.. 레벨 0 중 가장 정답률이 높은 문제를 가져와 보았다.

그렇게 가져온 것이 바로 세균 증식 문제!

그냥 봤을 땐 입출력 예가 이해가 안 됐지만, 역시 꼼꼼히 봐야 된다고..

다행히 금방 이해는 됐다.

n이 10을, 또는 t가 15를 넘었을 때 멈추게끔 if 조건문을 뼈대로 형성해야겠다는 생각이 들었다.

 

그런데 코드를 너무 근본없이 썼다

n, t, result 값이 모두 나와야 하는데 n과 t가 같이 더해져서 나온다는 점.

그리고 수열 배치가 제대로 되지 않는다는 점... 등등 상당히 많은 문제가 나왔다.

이론을 완벽히 거스르는 코드인 점을 확인했으니 다 지워버리고 처음부터 다시 했다.


그렇다면 어떻게 하면 좋을까?

다시 생각해보니 n, t값이 필요한가? 그냥 result(출력값)만 나오면 그만인 것 같다.

그럼 n과 출력값을 한묶음으로 보고 t는 시간이기 때문에 따로 식을 만들어야겠다.

배운 것을 써먹어야 하기에 강의에서 배운 for 문을 사용해보기로 했다.

왜냐면 제한사항에 숫자 n과 t의 범위가 명시되어 있으니깐 반복문으로 작성하면 가능하겠다고 생각했다.

def solution(n, t):
    answer = n
    for i in range(0, 15, 1):
        answer = answer * 2
        
    return answer

다시 해 보았다.

세균 수인 n을 출력값으로 잡고, i로 정렬해보았다.

range는 구글링해서 얻어낸 건데, 0시간부터 15시간까지 +1씩 숫자가 증가한다는 뜻이다.

그래서 그 answer값을 얻어내는 것인데,

이번에는 2테스트만 통과했다.

다행히 이번에는 원인을 쉽게 파악할 수 있었다.

15라는 한계선을 잡았기 때문에 무조건 range가 15까지 증가하게 했고,  결과값이 2의 15제곱이 나와버린 것이다.

근데 제한을 생각하는 것보다는 입력값은 결국 ai가 내는 거니깐

range 안에 15 대신 t를 넣었다.

됐다!


다르게도 생각해 보았는데,

t는 결국 1씩 증가하는 것이니깐 한 시간 당 한 번 증가하는 것이라면 이렇게 해도 상관없겠다고 생각했다.

n * 2를 t번 반복하겠다는 뜻인데, 이렇게 하니 역시 또 들어맞는다.

문제도 결국 말장난이라 내가 해석하기 나름인 것 같다는 걸 느꼈다.


테스트를 끝내고 나면 다른 분들은 어떤 코드로 풀었는지 보여주는데,

정말 다양해서 호기심 있게 봤다.

근데 그 중에 가장 신기했던 게

뭔지 몰라서 검색해보았는데, '비트 쉬프트'라고 하는 용어였다.

비트 쉬프트가 왼쪽으로 이동하면 2배 증가이고, 오른쪽은 1/2배라고 한다.

점점 우리가 이해하기 쉽게 언어가 바뀌는 것 같아서 너무 신기했다


하나를 더 해 보았다. 이번 주제는 'OX 퀴즈'다.

문자열 배열이기 때문에 아까와 같은 for 문으로 시작하면 될 것 같다.

for q in quiz:로 시작은 했지만, 어떻게 해야 할지 감이 쉽게 안 와서 다시 강의를 들어보다가

split 문법 강의를 듣고 연산자, 등호를 기준으로 split해야겠다는 생각이 떠올라서 만들었다.

def solution(quiz):
    answer = []
    for q in quiz:
        left, right = q.split('=')
        left = left.split() #연산자가 변수(+ or -)이기 때문에 미등록
        print(left)
        #변수에 대한 경우(조건문)로 나눔
        if left[1] == '+': # 더하기
            if int(left[0]) + int(left[2]) == int(right):
                answer.append('O') # answer string으로 append 특성을 넣어야 함
            else:
                answer.append('X')
        elif left[1] == '-': # 빼기
            if int(left[0]) - int(left[2]) == int(right):
                answer.append('O')
            else:
                answer.append('X')
    return answer

answer = 'O'로 하면 될 줄 알고 원래는 append string을 사용하지 않았는데,

그 덕에 다음과 같은 에러를 획득해서 바로 수정했다.

역시 코드를 끝내고 보니, 나와 코드문법은 비슷하게 접근한 사람들이 많지만,

만드는 형식은 크게 구애받지 않아도 되는 것 같다. 한 가지 문법을 가지고 여러 개의 형태로 만들 수 있을 때쯤

레벨 1에 감히 도전해보아도 괜찮을 것 같다.

'cording test' 카테고리의 다른 글

LV.0 가위바위보  (0) 2023.04.07
LV.0 로그인 성공  (0) 2023.04.05
LV.0 숫자 찾기(enumerate, find 함수를 통한 해결)  (4) 2023.03.31
LV.0 배열의 유사도  (1) 2023.03.30
LV.0 : ["최빈값 구하기"]  (0) 2023.03.29