모의고사
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 메서드에 대해 더 공부 해볼 계획이다.
주말에 이 문제들을 다시 한번 도전해봐야겠다..
'프로그래머스 > PCCE(코딩필수역량)' 카테고리의 다른 글
[모의고사] PCCE 1~5번 (0) | 2024.04.21 |
---|