230320 TIL - 프로그래머스 12939, 12951

thumbzzero·2023년 3월 20일
0

TIL

목록 보기
12/21

코딩테스트 제대로 준비 시작🔥
언어 : 자바스크립트, 파이썬
원래는 파이썬 사용하였으나 프론트엔드 개발자 희망하면 자바스크립트로 코테 준비하는 것도 좋겠다고 추천을 많이 받아서 일단 2개 다 공부해보는 걸로 !!
프로그래머스 레벨 2부터 풀기 시작해서 차근차근 레벨 올리기

Github - 링크텍스트


12939

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.

JavaScript

function solution(s) {
    var answer = '';
    numbers = s.split(' ').map(Number);
    
    answer += Math.min(...numbers);
    answer += " ";
    answer += Math.max(...numbers);
    return answer;
}
  • min, max 함수 사용할 때 Math.min(), Math.max() 로 사용
  • 띄어쓰기로 분리한 문자열 숫자로 변환 시 map(Number) 사용

Python

def solution(s):
    answer = ''
    numbers = list(map(int, s.split()))
    
    answer += str(min(numbers))
    answer += " "
    answer += str(max(numbers))
    return answer
  • list(map(int, [문자열 리스트]) 통해 문자열 리스트의 원소 각각을 정수로 변경
  • 자바스크립트와 다르게 동적타입변환이 이루어지지 않으므로 스트링에 숫자 넣을 때 str() 사용할 것

12951

모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열 리턴

sreturn
"3people unFollowed me""3people Unfollowed Me"
"for the last week""For The Last Week"

JavaScript
(1) 첫 번째 시도 - 답은 나오지만 런타임 에러로 실패

function solution(s) {
    var answer = '';
    words = s.split(" ");
    words.map((word) => {
        answer += word[0].toUpperCase();
        answer += word.slice(1).toLowerCase();
        answer += " "
    });
    answer = answer.slice(0, -1);
    return answer;
}

(2) 두 번째 시도 - 채점 결과 점수는 올라갔으나 여전히 런타임 에러 발생

function solution(s) {
    var answer = '';
    const s_ary = [...s];
    let isUpper = true
    s_ary.map((element) => {
        if (isUpper) {
            answer += element.toUpperCase();
            isUpper = false;
        } else if (element === " ") {
            answer += " "
            isUpper = true
        } else {
            answer += element.toLowerCase();
        }
    })
    return answer;
}`

(3) 정답 코드

function solution(s) {
    var answer = '';
    words = s.split(" ").map((word) => {
        return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()
    });
    answer = words.join(" ");
    return answer;
}
  • return word[0].toUpperCase() + word.slice(1).toLowerCase()return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()으로 수정하니 런타임 에러 해결됨
  • str.charAt(index) : 문자열에서 특정 인덱스에 위치하는 단일문자 반환
  • str.substring(begin, end) : 지정 인덱스 부분 문자열 반환

Python
(1) 런타임 에러 발생 코드

def solution(s):
    answer = []
    words = s.split(" ")
    for word in words:
        answer.append(word[0].upper() + word[1:].lower())
    
    return " ".join(answer)

(2) 정답 코드

def solution(s):
    answer = []
    words = s.split(" ")
    for word in words:
        answer.append(word.capitalize())
    
    return " ".join(answer)
  • 자바스크립트처럼 upper()와 lower()로 해결하려했으나 런타임 에러 발생 -> 파이썬에는 str.capitalize()라는 더 간단한 방법이 있었음
  • "공백문자가 연속해서 나올 수 있습니다." 라는 조건이 있으므로 split에 구분자 " " 넣어줄 것

0개의 댓글