프로그래머스/PCCE(코딩필수역량)

[모의고사] PCCE 6~10번

병아리개발자Mr Jo 2024. 4. 24. 23:41

모의고사

6번 이중배열의 덧샘(빈칸 채우기)

https://school.programmers.co.kr/learn/courses/19275/lessons/240611

 

프로그래머스

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

programmers.co.kr

 

7번 조건문(빈칸 채우기)

https://school.programmers.co.kr/learn/courses/19275/lessons/240612

 

프로그래머스

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

programmers.co.kr

 

8번 비즈네르 암호(잘못된 부분 수정)

https://school.programmers.co.kr/learn/courses/19275/lessons/240613

 

프로그래머스

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

programmers.co.kr

 

*9번 연속된 데이터 범위 처리( solution함수 작성)

https://school.programmers.co.kr/learn/courses/19275/lessons/240614

 

프로그래머스

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

programmers.co.kr

AI풀이

def solution(times, n):
    answer = 0
    
     # 첫 n일의 합을 계산합니다.
    current_sum = sum(times[:n])
    max_time = current_sum

    # 슬라이딩 윈도우 기법을 사용하여 나머지 구간의 합을 계산합니다.
    for i in range(1, len(times) - n + 1):
        current_sum = current_sum - times[i - 1] + times[i + n - 1]
        if current_sum > max_time:
            max_time = current_sum
            
    
    return max_time

다른 사람 풀이

def solution(times, n):
    answer = 0

    for i in range(len(times)):
        s = sum(times[i:i+n])
        answer = max(s, answer)

    return answer

 

 

*10번 배열 값 문자치환(solution함수 작성)

https://school.programmers.co.kr/learn/courses/19275/lessons/240615

 

프로그래머스

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

programmers.co.kr

 

AI풀이

def solution(snippet, message):
    # 줄임말과 원래 단어를 사전으로 매핑
    replacements = {s[0]: s[1] for s in snippet}

    # 메시지를 단어 단위로 분할하고, 각 단어를 확인
    words = message.split()
    updated_words = []

    for word in words:
        # 단어에 구두점이 포함되어 있는 경우 확인
        if word[-1] in "!@#$%^&*().,?" and word[:-1] in replacements:
            # 마지막 문자를 구두점으로 분리하고, 대치가 필요한 경우 대치 수행
            updated_words.append(replacements[word[:-1]] + word[-1])
        elif word in replacements:
            # 구두점이 없는 경우에 대한 대치
            updated_words.append(replacements[word])
        else:
            # 대치가 필요 없는 경우 원래 단어 그대로 사용
            updated_words.append(word)

    # 최종적으로 변환된 단어들을 하나의 문자열로 결합
    return ' '.join(updated_words)

다른 사람 풀이

def solution(snippet, message):
    answer = ''
    send = message.split()
    for i in range(0, len(send)) :
        for j in range(0, len(snippet)) :
            if send[i] == snippet[j][0] :
                send[i] = snippet[j][1]
    answer = " ".join(send)
    return answer

 

 

느낀점

문제 9와 10을 풀어보면서 많은걸 깨달았다.

우선 solution을 작성해야 하는데 아직 10분 이상 봐도 어떻게 풀지 엄두가 안나 AI의 도움을 받았다.

 

문제 9는 슬라이딩 윈도우 기법을 쓸 수 있는데, 다른 분들은 파이썬의 슬라이싱을 활용해서 훨씬 간결하게 해결한것을 확인 할 수 있었다

 

그리고 문제 10도 비슷한 상황, 딕셔너리 사용과 슬라이싱을 조합해서 조금 복잡하게 접근했는데, 다른 사람들은 더 직관적이고 간단하게 해결하였다.

 

다양한 풀이를 보는 건 정말 많은 도움이 되는것 같다.

 

이 경험을 바탕으로 파이썬에서 자주 쓰이는 슬라이싱과 .join 메서드에 대해 더 공부 해볼 계획이다.

주말에 이 문제들을 다시 한번 도전해봐야겠다..