본문 바로가기
  • 머킹이의 머신로그
오늘부터 코딩테스트

[오늘부터 코딩테스트]프로그래머스 코딩 기초 프로그램 풀기

by 머킹 2023. 9. 19.
728x90

파이썬으로 풀어보는 코딩테스트 Lv.0

안녕하세요 머킹입니다.

오늘도 문제들을 풀어봤는데요.

0 레벨도 하염없이 어렵지만 그래도 열심히 하다 보면 이해하겠죠?!


배열 만들기 4
문제 설명
정수 배열 `arr`가 주어집니다. `arr`를 이용해 새로운 배열 `stk`를 만드려고 합니다.
변수 `i`를 만들어 초기값을 0으로 설정한 후 `i`가 `arr`의 길이보다 작으면 다음 작업을 반복합니다.

- 만약 `stk`가 빈 배열이라면 `arr [i]`를 `stk`에 추가하고 `i`에 1을 더합니다.
- `stk`에 원소가 있고, `stk`의 마지막 원소가 `arr [i]`보다 작으면 `arr[i]`를 `stk`의 뒤에 추가하고 `i`에 1을 더합니다.
- `stk`에 원소가 있는데 `stk`의 마지막 원소가 `arr[i]`보다 크거나 같으면 `stk`의 마지막 원소를 `stk`에서 제거합니다.

위 작업을 마친 후 만들어진 `stk`를 return 하는 solution 함수를 완성해 주세요.

 

def solution(arr):
    stk = []
    i = 0
    if i < arr(len):
        if stk == []:
            append.skt(arr(i)) =+ i
        elif stk != []:
            stk(-1) < arr[i] 
            append.arr[i] + stk 
        else:
            stk(-1) > arr[i]
            stk.pop()
            
    return stk

이렇게 코드를 짰지만.. 짜면서도 그래 이건 아니다 싶었습니다.

근데 그냥 무조건 써보기로 했어요.

쓰면서 제가 문제를 이해하고 있는지, 문제를 이해한다면 어느 부분이 막히는지 확인하고 싶었습니다.

문제는 이해하는데 아직 문법과 이해가 부족해서 제대로 코드를 못 짜고 있는 상황입니다.

 

def solution(arr):
    stk = []  # 새로운 배열 stk를 초기화
    i = 0  # 변수 i를 초기화
    
    # i가 arr의 길이보다 작을 때 까지 반복
    while i < len(arr):
        # stk가 빈 배열이거나, stk의 마지막 원소가 arr[i]보다 작을 때
        if not stk or stk[-1] < arr[i]:
            stk.append(arr[i])  # arr[i]를 stk에 추가
            i += 1  # i에 1을 더함
        else:
            stk.pop()  # stk의 마지막 원소를 제거
            
    return stk

이건 풀이의 답입니다.

저는 if문을 썼지만 while문을 활용해서 조건을 걸어야 했고,

not과 or을 더 다양하게 사용할 수 있어야 한다고 생각했습니다.

 

def solution(arr):
    stk = []
    for i in range(len(arr)):
        while stk and stk[-1] >= arr[i]:
            stk.pop()
        stk.append(arr[i])
    return stk

이건 다른 사람의 풀이인데요.

굉장히 간결하게 잘 쓴 것 같아서 신기했습니다.

굳이 if문을 사용하지 않고도 이렇게 풀어낼 수 있구나... 또 하나 배워갑니다.

 


간단한 논리 연산

문제 설명
boolean 변수 `x1`, `x2`, `x3`, `x4`가 매개변수로 주어질 때, 

다음의 식의 true/false를 return 하는 solution 함수를 작성해 주세요.
- (`x1` ∨ `x2`) ∧ (`x3` ∨ `x4`)

 

저 진짜.. 무슨 소린지 하나도 모르겠어요 저 v는 뭐지...

찾아보니 논리 연산자였습니다 ㅎㅎ

def solution(x1, x2, x3, x4):
    answer = (x1 or x2) and (x3 or x4)
    return answer

이렇게 간단한 문제였음을...

def solution(x1, x2, x3, x4):
	return (x1 | x2) & (x3 | x4)

다른 사람의 문제풀이를 보니까 되게 신기했어요.

or를 |로 and를 &로 쓰다니..

또 배워갑니다.

 

처음에 문제자체를 이해 못 해서 gpt에게 설명을 부탁했습니다.

 

1. `solution` 함수는 네 개의 논리 변수 `x1`, `x2`, `x3`, `x4`를 매개변수로 받습니다.
2. 논리식 `(x1 ∨ x2) ∧ (x3 ∨ x4)`는 다음과 같은 두 부분으로 구성됩니다:
    - `(x1 ∨ x2)`: 이 부분은 `x1` 또는 `x2` 중 하나라도 `True`이면 `True`가 되는 부분입니다. 여기서 `∨`는 "또는"을 나타내는 논리 OR 연산자입니다.
    - `(x3 ∨ x4)`: 이 부분은 `x3` 또는 `x4` 중 하나라도 `True`이면 `True`가 되는 부분입니다. 마찬가지로 `∨`는 "또는"을 나타내는 논리 OR 연산자입니다.
3. 두 부분을 `∧` 연산자로 연결했습니다. 이것은 "그리고"를 나타내는 논리 AND 연산자입니다. 따라서 전체 논리식은 두 부분이 모두 `True`일 때만 `True`가 됩니다.
4. 이제 코드에서 `result` 변수에 이 논리식을 계산한 결과를 저장합니다. 코드에서는 파이썬의 `or`와 `and` 논리 연산자를 사용하여 논리식을 계산합니다.
5. 마지막으로, `result` 변수에 저장된 결과를 반환합니다. 이것은 논리식 `(x1 ∨ x2) ∧ (x3 ∨ x4)`의 결과값이 됩니다.

예를 들어, `x1`, `x2`, `x3`, `x4`가 `True`, `False`, `True`, `False`라면:

- `(x1 ∨ x2)` 부분은 `True` 또는 `False` 중 하나인데 `x1`이 `True`이므로 이 부분은 `True`가 됩니다.
- `(x3 ∨ x4)` 부분은 `True` 또는 `False` 중 하나인데 `x3`이 `True`이므로 이 부분은 `True`가 됩니다.
따라서 전체 논리식 `(x1 ∨ x2) ∧ (x3 ∨ x4)`의 결과는 `True`와 `True`의 AND 연산이므로 `True`가 됩니다.

결과적으로 `True`가 반환됩니다.

 


오늘 연산자 부호를 알아서 다음 문제 풀 때는 헷갈리지 않아야겠습니다.

아직도 제가 부족한 점들이 많지만 그래도 문제풀이는 꽤 재밌는 것 같습니다 ㅎㅎ