코딩테스트 입문 Day 14 조건문, 반복문, 시뮬레이션, 문자열


1. 가까운 수

정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ array의 길이 ≤ 100
  • 1 ≤ array의 원소 ≤ 100
  • 1 ≤ n ≤ 100
  • 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.

(1) 코드 작성

def solution(array, n):
    sorted_array = sorted(array, reverse=False)
    answer = sorted(sorted_array, reverse=False, key=lambda x: abs(x-n))
    return answer[0]

(2) 코드 리뷰 및 회고

  • 문제는 array 에서 n과 가장 가까운 수를 구하는 것이다.
  • 위 조건을 만족하기 위해 sorted 함수에서 key 파라미터를 설정하여 가장 가까운 수를 처음으로 올 수 있도록 설정했다.

(3) 실패 코드 공유🌞

def solution(array, n):
    answer = sorted(array, reverse=False, key=lambda x: abs(x-n))
    return answer[0]
테스트 5에서 실패 결과 발견


  • 위 결과가 왜 떴을 까 고민을 하면서 Test에 여러 경우를 추가해서 돌려보았다.
  • 똑같은 수만 들어갔을 경우(이는 해당 X)
  • 가까운 수가 두개 이상인 경우, 작은 값을 잘 반환하는지(이는 해당 X)
    • array=[12, 14, 16], n=13을 넣어 12가 출력되는 것을 확인
  • 순간 입력되는 array 값에서 [14, 12, 16]으로 들어온다면 n=13일 때 14가 반환된다는 사실을 알게되었다.
  • 위 경우를 해결하기 위해 array를 1차 정렬(내림차순)해주고 정렬된 array를 사용하였다.
  • 문제 해결 🌞


2. 369게임

머쓱이는 친구들과 369게임을 하고 있습니다. 369게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 머쓱이가 말해야하는 숫자 order가 매개변수로 주어질 때, 머쓱이가 쳐야할 박수 횟수를 return 하도록 solution 함수를 완성해보세요.

제한사항

  • 1 ≤ order ≤ 1,000,000

(1) 코드 작성

def solution(order):
    return len([int(n) for n in str(order) if n in '369'])

(2) 코드 리뷰 및 회고

  • 문제는 숫자로 들어오는 order에 3, 6, 9가 포함되는 개수를 반환하는 것이다.
  • 위 조건을 만족시키기 위해 리스트 컴프리헨션으로 369가 포함된 경우를 가져오고, len 함수로 몇 개가 들어왔는지를 반환했다.
  • EASY 😎


3. 암호 해독

군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.

  • 암호화된 문자열 cipher를 주고받습니다.
  • 그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.

문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ cipher의 길이 ≤ 1,000
  • 1 ≤ codecipher의 길이
  • cipher는 소문자와 공백으로만 구성되어 있습니다.
  • 공백도 하나의 문자로 취급합니다.

(1) 코드 작성

def solution(cipher, code):
    answer = ""
    for i in range(1, len(cipher)//code+1):
        answer += cipher[code*i-1]
    return answer

(2) 코드 리뷰 및 회고

  • cipher에서 code번째 문자만 가져오기 위해 range로 1부터 cipher에서의 code 배수까지의 값을 지정했다.
  • answer 이라는 빈 문자열에 cipher에서 code의 배수에 해당하는 값을 추가했는데, 인덱스는 0부터 시작한다는 점에서 1을 빼주었다.
  • EASY 😎


4. 대문자와 소문자

문자열 my_string이 매개변수로 주어질 때, 대문자는 소문자로 소문자는 대문자로 변환한 문자열을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 영어 대문자와 소문자로만 구성되어 있습니다.

(1) 코드 작성

import re

def solution(my_string):
    answer = ""
    for s in my_string:
        l = re.sub("[a-z]", "", s)
        if len(l) == 0:
            answer += s.upper()
        else: 
            answer += s.lower()
    return answer

(2) 코드 리뷰 및 회고

  • 문제는 입력값에서 소문자는 대문자로, 대문자는 소문자로 변환하는 것이다.
  • 만약 소문자에 해당하는 경우는 대문자 처리해주기 위해 re 모듈을 사용했다.
    • re 모듈을 사용하여 소문자는 ““로 제거
    • 소문자인 경우 ““가 되기 때문에 문자열의 길이는 0이다
    • 소문자 처리 후 문자열이 사라지면 upper 처리
    • 소문자 처리 후 문자열이 사라지지 않으면 lower 처리
  • 모듈을 잘 활용하면 EASY 😎


👩🏻‍💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.

댓글남기기