본문 바로가기
Coding Test/이것이 코딩 테스트다 with 파이썬

[이코테] chapter12 구현 문제

by na1-4an 2023. 7. 24.

아래 글은 [이것이 코딩 테스트다 wiht 파이썬] 책을 기반하여 작성한 글입니다.

 

구현 알고리즘

: 머릿속에 잇는 알고리즘을 정확하고 빠르게 프로그램으로 작성하기

✨구현 알고리즘은 피지컬 싸움이다!
(1) 완전 탐색
     : 모든 경우의 수를 다 계산하는 해결 방법
(2) 시뮬레이션
     : 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행하는 문제

- 고려해야하는 메모리 제약 사항 -

파이썬은 자료형의 표현 범위 제한은 고려 안해도 됨!

리스트는 보통 128MB ~ 512MB

데이터의 개수(리스트 길이)  메모리 사용량
1,000 약 4KB
1,000,000 약 4KB
10,000,000 약 40MB

12-1.py 럭키 스트레이트 - ⭐1/3 (⭕)

N = input()
n = len(N) // 2
right = left = 0

for i in range(n):
    right += int(N[i])
    left += int(N[i+n])

if right == left:
    print("LUCKY")
else:
    print("READY")

 

 

12-2.py 문자열 재정렬 - ⭐1/3 (⭕)

문제를 잘 읽고 풀자 ~~

그리고 조건문에서 괄호를 잘 사용하자~~

data = input()
result1= []
result2 = 0

for i in range(len(data)): 
    if (ord(data[i]) <= 90) & (ord(data[i]) >=65):
        result1.append(data[i])
    else: result2 += int(data[i])

result1.sort()
result1.append(result2)
print(str(result1))

교재 풀이를 보니 나는 파이썬의 장점들을 잘 사용하지 못하는 것 같다..ㅎㅎ

이 문제처럼 쉬운 문제여도 파이썬의 편리함을 사용하면 훨씬 쉽게 코드를 짤 수 있는데!!!

isalpha() - 알파벳인지 확인하는 함수

print('', join(result)) - 리스트에 있는 함수를 문자열로 바꾸는 함수

 

그리고, 숫자가 아예 없을 때를 고려하여 위의 코드에서 result2의 값이 0이면 append를 하지 않는 조건을 하나 더 추가해야 한다!

 

 

12-3.py 문자열 압축 - ⭐1.5/3 (❌)

두근두근 2020 카카오 신입 공채 기출 문제이다.

문제의 길이가 책의 한 페이지를 꽉 채웠다.! 뒤의 문제들도 별 1.5개나 2개짜리여서 풀고 싶었다..

https://school.programmers.co.kr/learn/courses/30/lessons/60057

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제를 풀면서 나온 아이디어 2가지는 아래와 같다.

  1. 슬라이싱 사용 - [start:end:step]
  2. 2중 for문 사용? while문 사용? while: data[start:end:i] == data[start + i : end+i : i]

어렵다.. 정답 풀이나 해야지..

[교재풀이]

def solution(s):
    answer = len(s)
    for step in range(1, len(s) // 2 + 1):
        compressed = ""
        prev = s[0:step]
        count = 1
        
        for j in range(step, len(s), step):
            if prev == s[j:j+step]:
                count += 1
            else:
                compressed += str(count) + prev if count >= 2 else prev
                prev = s[j:j+step]
                count = 1
        compressed += str(count) + prev if count >= 2 else prev
        answer = min(answer, len(compressed))
    return answer

이 문제는 정말 피지컬 싸움이 맞는 듯하다. 코드를 짜는 능력!

문제를 어떻게 풀어야 하는 지에 대한 아이디어는 매우 단순하다. 하지만 이를 구현하는 능력이 요구된다.

8번째 줄의 "for j in range(step, len(s), step):"처럼 for문을 잘 사용할 줄 알아야하고

12번째 줄의 "compressed += str(count) + prev if count >= 2 else prev"처럼 간단하게 코드를 짤 줄 알아야 한다!!

 

 

12-4.py 자물쇠와 열쇠 - ⭐1.5/3 (⭕)

파이썬에는 switch-case문이 없

 

 

12-5.py - ⭐2/3 (⭕)

파이썬에는 switch-case문이 없

 

 

12-6.py 기둥과 보 설치 - ⭐1.5/3 (⭕)

파이썬에는 switch-case문이 없

 

 

12-7.py 치킨 배달 - ⭐2/3 (⭕)

파이썬에는 switch-case문이 없

 

 

12-8.py 외벽 점검 - ⭐3/3 (⭕)

파이썬에는 switch-case문이 없