3주차 코딩테스트 풀이

인소리·2023년 4월 12일
0

Coding Test

목록 보기
12/13

1. 같은 숫자는 싫어🔟🔟❌

문제설명📝

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,

arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

제한사항📍

  • 배열 arr의 크기 : 1,000,000 이하의 자연수
  • 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수

입출력 예🖨

arranswer
[1,1,3,3,0,1,1][1,3,0,1]
[4,4,4,3,3][4,3]

코드📃

def solution(arr):
    answer = []
    num = -1
    for i in arr:
        if i != num:
            answer.append(i)
        num = i
    return answer

코드 설명🔍

arr의 원소는 0부터 9이기 때문에 비교할 num 변수를 -1로 초기화합니다. for문을 돌려서 i와 num이 같지 않다면 num에 i를 넣어서 그 다음 원소 i와 num을 비교합니다. num이 이전 i이기 때문에 연속된 숫자라면 num과 i가 같으므로 if문을 만족하지 못합니다. 이런 과정을 반복하여 연속된 숫자가 아닐 때만 i를 answer에 넣어줍니다.



2. 3진법 뒤집기🤸‍

문제설명📝

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

제한사항📍

  • n은 1 이상 100,000,000 이하인 자연수입니다.

입출력 예🖨

nresult
457
125229

코드📃

def solution(n):
    answer = 0
    arr = []
    while n > 0:
        arr.append(n % 3)
        n //= 3
    arr.reverse()
    cnt = 0
    for i in arr:
        answer += i * (3 ** cnt)
        cnt += 1
    return answer

코드 설명🔍

3진법으로 바꾸는 방법은 n이 0이 될 때까지 3으로 나눈 나머지 역순으로 구하는 것이다. 나머지를 순서대로 담으면 3진법 상에서 앞뒤로 뒤집은 것과 같다. 이를 다시 10진법으로 바꾸려면 각 자리 숫자에 3의 n제곱을 곱해주면 된다. 오른쪽부터 3의 0제곱, 3의 1제곱 ... 순이기 때문에 편의를 위해 arr을 reverse() 메서드를 사용해 뒤집어준 뒤, for문을 돌려서 answer += i * (3 ** cnt)을 해주었다. 왼쪽으로 제곱의 숫자가 1씩 증가하므로 계산 후 cnt에 1씩 더해주었다.



3. 이상한 문자 만들기♌♍

문제설명📝

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

제한사항📍

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

입출력 예🖨

sreturn
"try hello world""TrY HeLlO WoRlD"

코드📃

def solution(s):
    answer = ''
    index = 0
    for i in s:
        if i == ' ':
            index = 0
            answer += i
            continue
        else:
            if index % 2 == 0:
                answer += i.upper()
            else:
                answer += i.lower()
        index += 1
    return answer

코드 설명🔍

공백이 나오면 인덱스가 다시 0부터 시작이므로 공백이냐 아니냐로 if else 조건문을 준다. 공백이면 index를 0으로 초기화하고 answer에 공백을 넣어준다. for문 마지막에 index += 1은 지나가야 하므로 continue를 써주었다. 만약 공백이 아니라면 index가 짝수일 경우와 홀수일 경우로 if else문으로 써서 짝수면 upper() 메서드로 i를 대문자로 만든 후에 answer에 더해주고, 홀수면 lower() 메서드로 i를 소문자로 만든 후에 answer에 더해준다. 공백이 아닌 이상 index는 1씩 증가해야 하므로 index += 1을 써준다.

profile
코딩이라는 감옥에 갇혀 사는 삶

0개의 댓글