728x90

문제 설명

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

제한 조건
  • 공백은 아무리 밀어도 공백입니다.
  • s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
  • s의 길이는 8000이하입니다.
  • n은 1 이상, 25이하인 자연수입니다.
입출력 예snresult
"AB" 1 "BC"
"z" 1 "a"
"a B z" 4 "e F d"

 

나의 풀이

def solution(s, n):
    lower_list = "abcdefghijklmnopqrstuvwxyz"
    upper_list = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    result = []

    for i in s:
        if i is " ":
            result.append(" ")
        elif i.islower() is True:
            new_ = lower_list.find(i) + n
            result.append(lower_list[new_ % 26])
        else:
            new_ = upper_list.find(i) + n
            result.append(upper_list[new_ % 26])
    return "".join(result)

내장함수의 존재도 몰랐고 그냥 노가다 풀이이다..

아스키코드를 사용하면 더 편하게 구해질 것 같다.

 

다른 사람의 풀이

def solution(s, n):
    s = list(s)
    
    for i in range(len(s)):
        if s[i].isupper():
            s[i]=chr((ord(s[i])-ord('A')+ n)%26+ord('A'))
        elif s[i].islower():
            s[i]=chr((ord(s[i])-ord('a')+ n)%26+ord('a'))

    return "".join(s)
  • 각 문자열을 하나씩 쪼개서 아스키코드로 변환해야하기 때문에 list(s)로 치환해서 담았다. 
  • 만약 s[i]번째 문자가 대문자/소문자라면(isupper/islower) s[i]의 값은 (s[i]의 ASCII값 - 'A'/'a'의 ASCII값(97/65))+n을 해주어 몇 번째에 있는 알파벳인지 찾아준다. (알파벳은 총 25글자)
  • ord(s[i])-ord('A') (또는 ord('a')) 26으로 나눈 나머지 값에 'A'/'a' ASCII 값 = 97/65을 더해주면 n만큼 민 값이 나오게 된다. 
  • %26을 해주는 이유 ? z 또는 Z의 범위를 넘어가지 않도록 하기 위해
  • 즉, 맨 처음 값인 ord('A')와 ord('a')에서 n만큼 증가한 값이 무엇인지 찾는 것이다. 
  • 공백은 밀어도 공백이기 때문에 무시한다.
  • ""을 기준으로 join하여 return

 

✅ Python ASCII 

  • ord(문자) : 문자에 해당하는 ASCII 정수값 반환 
  • chr(정수) : 정수에 해당하는 ASCII 문자 반환
  • string.ascii_lowercase : 소문자에 해당하는 ASCII 값 
  • string.ascii_uppercase : 대문자에 해당하는 ASCII 값

 

✅ ASCII Chart 

문제 다가가기

(1) 아스키코드 값을 n만큼 더하여 문자로 치환한다.

(2) 단, 공백은 그대로 표현된다.

(3) 만약 문자가 Z이고, 10을 더한다면 J 가 나와야한다. 

 

>> 문자열의 아스키코드에서 A/a의 아스키 값을 뺀 후 n을 더해서 문자열이 몇번째 알파벳인지 파악해야한다. 이 값은 26으로 나눴다. 왜 26으로 나눠야하는지 몰랐는데 위에서 참고한 링크를 보니 Z/z의 범위를 넘어가지 않게 하기 위함이라고 한다. (진짜.. 어떻게 저런 생각까지 하는걸까..?)

26을 나눈 값에 다시 A/a의 아스키 값을 더해주면 n만큼 뒤로 밀린 값이 나오게 된다.

공백일 땐 for문이 진행되도록 continue를 해줬다.


코드 설명

우선 이 문제를 풀기 전 반드시 알아두어야하는 파이썬의 내장함수가 있다.

 - ord(문자) : 해당 문자의 ASCII 정수값 반환 

- chr(정수) : 해당 정수의 ASCII 문자 반환

- string.ascii_lowercase : 소문자 ASCII 값 

- string.ascii_uppercase : 대문자 ASCII 값

 

파이썬에서 아스키코드로 변환하는 방법을 찾아보다가 이 4가지 방법을 알게 되었다. 무작정 하드코딩하는 것 보다 이런 방법을 알고 있으면 훨씬 쉽고 간단하게 코드를 짤 수 있는 것 같다.. 아직 많이 모르고 있다는 걸 이번 문제를 풀면서 또 느꼈다!

 

나는 ord(), chr() 함수에 대해 설명하고자 한다.

 

(1) 문자열 탐색 및 공백 처리

def solution(s, n):
    answer = ''
    for i in s:
        if i == " ":
            answer += " "

문자열 s를 보고 문자 하나씩 탐색해나간다.

만약, i(문자)가 공백문자열이라면, 결과에 공백 문자열을 더해준다. 

 

(2) 아스키코드 처리

def solution(s, n):
    answer = ''
    for i in s:
        if i == " ":
            answer += " "
            
	else:
            k = chr(ord(i) + n)
            if k.isupper() != i.isupper() or not k.isalpha():
                k = chr(ord(k) - 26)
            answer += k
    return answer

- 만약 문자가 공백이 아닐 경우 (else문으로 들어온다.)

- 임시 변수 k에 i의 아스키 코드값을 구한 후 n을 더해주고 이를 다시 문자로 변환한다.

    -> k = 임시 변수

    -> ord(k) + n : k의 아스키 코드 값에 n을 더해줌.

    -> chr(ord(k) + n) : 다시 문자로 바꾸어줌.

 

- 임시변수 k에는 두가지 상황이 있을 수 있다. -> else 문 내에 if 문으로 처리

    (1) k가 특수문자인 경우 (대소문자의 범위에서 벗어남)

    (2) 기존 문자는 대문자이지만, n을 더한 k가 소문자가 된 경우

        -> 아스키코드 표에서 문자 = Z, n =10인 경우를 생각하면 된다.

    (처리방법)

        - 만약 현재 문자 i는 대문자인데, k가 소문자인 경우, 또는 k가 알파벳이 아닌 경우

            -> k에서 26(알파벳의 개수)만큼 빼서 해결할 수 있다.

                -> i = Z, n = 10일 때를 생각해보자.    

                -> i에 n을 더하면 k는 d가 된다. 이때  k.isalpha는 참이지만, 앞 조건이 거짓이 된다.

                -> k에서 26을 빼 주면 J가 된다.

                -> Z에서 10을 더하면  J가 된다!!!

728x90
728x90

문제 설명

다음은 아이스크림 가게의 상반기 주문 정보를 담은 FIRST_HALF 테이블과 아이스크림 성분에 대한 정보를 담은 ICECREAM_INFO 테이블입니다. FIRST_HALF 테이블 구조는 다음과 같으며, SHIPMENT_ID, FLAVOR, TOTAL_ORDER 는 각각 아이스크림 공장에서 아이스크림 가게까지의 출하 번호, 아이스크림 맛, 상반기 아이스크림 총주문량을 나타냅니다. FIRST_HALF 테이블의 기본 키는 FLAVOR입니다.

NAMETYPENULLABLE
SHIPMENT_ID INT(N) FALSE
FLAVOR VARCHAR(N) FALSE
TOTAL_ORDER INT(N) FALSE

ICECREAM_INFO 테이블 구조는 다음과 같으며, FLAVOR, INGREDITENT_TYPE 은 각각 아이스크림 맛, 아이스크림의 성분 타입을 나타냅니다. INGREDIENT_TYPE에는 아이스크림의 주 성분이 설탕이면 sugar_based라고 입력되고, 아이스크림의 주 성분이 과일이면 fruit_based라고 입력됩니다. ICECREAM_INFO의 기본 키는 FLAVOR입니다. ICECREAM_INFO테이블의 FLAVOR는 FIRST_HALF 테이블의 FLAVOR의 외래 키입니다.

NAMETYPENULLABLE
FLAVOR VARCHAR(N) FALSE
INGREDIENT_TYPE VARCHAR(N) FALSE

문제

상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회하는 SQL 문을 작성해주세요.


예시

예를 들어 FIRST_HALF 테이블이 다음과 같고

SHIPMENT_IDFLAVORTOTAL_ORDER
101 chocolate 3200
102 vanilla 2800
103 mint_chocolate 1700
104 caramel 2600
105 white_chocolate 3100
106 peach 2450
107 watermelon 2150
108 mango 2900
109 strawberry 3100
110 melon 3150
111 orange 2900
112 pineapple 2900

ICECREAM_INFO 테이블이 다음과 같다면

FLAVORINGREDIENT_TYPE
chocolate sugar_based
vanilla sugar_based
mint_chocolate sugar_based
caramel sugar_based
white_chocolate sugar_based
peach fruit_based
watermelon fruit_based
mango fruit_based
strawberry fruit_based
melon fruit_based
orange fruit_based
pineapple fruit_based

상반기 아이스크림 총주문량이 3,000보다 높은 아이스크림 맛은 chocolate, strawberry, melon, white_chocolate입니다. 이 중에 아이스크림의 주 성분이 과일인 아이스크림 맛은 strawberry와 melon이고 총주문량이 큰 순서대로 아이스크림 맛을 조회하면 melon, strawberry 순으로 조회되어야 합니다. 따라서 SQL 문을 실행하면 다음과 같이 나와야 합니다.

FLAVOR
melon
strawberry

 

 

풀이

SELECT FIRST_HALF.FLAVOR 
FROM FIRST_HALF JOIN ICECREAM_INFO 
ON FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVOR
WHERE TOTAL_ORDER > 3000 AND INGREDIENT_TYPE = "fruit_based"
ORDER BY TOTAL_ORDER DESC
SELECT a.FLAVOR 
FROM FIRST_HALF AS a 
LEFT JOIN ICECREAM_INFO AS b 
ON a.FLAVOR = b.FLAVOR
WHERE a.TOTAL_ORDER > 3000 AND b.INGREDIENT_TYPE LIKE 'fruit_based'
ORDER BY a.TOTAL_ORDER DESC;

-- FLAVOR는 공통 컬럼, 테이블 명 작성 필수

 

정리

JOIN
데이터베이스 내의 '여러 테이블'에서 가져온 레코드를 조합하여 '하나의 테이블'이나 '결과 집합'으로 표현해 주는, Relation Database 에서 가장 많이 쓰이는 녀석이다.

(INNER) JOIN
여기서 사용된 조인은 가장 기본적인 조인이다.

  • 조인하는 테이블의 ON 절의 조건이 일치하는 결과만 출력
  • 표준 SQL과는 달리 MySQL에서는 JOIN, INNER JOIN, CROSS JOIN이 모두 같은 의미로 사용된다.
SELECT u.userid, name 
FROM usertbl as u INNER JOIN buytbl as b 
ON u.userid=b.userid 
WHERE u.userid="111" -- join을 완료하고 그다음 조건을 따진다.

함축 구문도 존재한다. (콤마)

SELECT u.userid, name 
FROM usertbl u, buytbl b 
ON u.userid=b.userid 
WHERE u.userid="111" -- join을 완료하고 그다음 조건을 따진다.

 

https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-JOIN-%EC%A1%B0%EC%9D%B8-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EC%95%8C%EA%B8%B0%EC%89%BD%EA%B2%8C-%EC%A0%95%EB%A6%AC

728x90
728x90

문제 설명

S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다.

물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다.

부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요.

제한사항
  • d는 부서별로 신청한 금액이 들어있는 배열이며, 길이(전체 부서의 개수)는 1 이상 100 이하입니다.
  • d의 각 원소는 부서별로 신청한 금액을 나타내며, 부서별 신청 금액은 1 이상 100,000 이하의 자연수입니다.
  • budget은 예산을 나타내며, 1 이상 10,000,000 이하의 자연수입니다.

입출력 예dbudgetresult
[1,3,2,5,4] 9 3
[2,2,3,3] 10 4
입출력 예 설명

입출력 예 #1
각 부서에서 [1원, 3원, 2원, 5원, 4원]만큼의 금액을 신청했습니다. 만약에, 1원, 2원, 4원을 신청한 부서의 물품을 구매해주면 예산 9원에서 7원이 소비되어 2원이 남습니다. 항상 정확히 신청한 금액만큼 지원해 줘야 하므로 남은 2원으로 나머지 부서를 지원해 주지 않습니다. 위 방법 외에 3개 부서를 지원해 줄 방법들은 다음과 같습니다.

  • 1원, 2원, 3원을 신청한 부서의 물품을 구매해주려면 6원이 필요합니다.
  • 1원, 2원, 5원을 신청한 부서의 물품을 구매해주려면 8원이 필요합니다.
  • 1원, 3원, 4원을 신청한 부서의 물품을 구매해주려면 8원이 필요합니다.
  • 1원, 3원, 5원을 신청한 부서의 물품을 구매해주려면 9원이 필요합니다.

3개 부서보다 더 많은 부서의 물품을 구매해 줄 수는 없으므로 최대 3개 부서의 물품을 구매해 줄 수 있습니다.

입출력 예 #2
모든 부서의 물품을 구매해주면 10원이 됩니다. 따라서 최대 4개 부서의 물품을 구매해 줄 수 있습니다.

 

나의 풀이

def solution(d, budget):
    answer = 0    
    d.sort()
    now=0
    for x in d:
        if (now+x)<=budget:
            now+=x
            answer+=1
        else:
            break
    return answer

 

 

다른 사람의 풀이

def solution(d, budget):
    d.sort()
    while budget < sum(d):
        d.pop()
    return len(d)
728x90
728x90

문제 설명

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

제한 사항
  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예sreturn
"try hello world" "TrY HeLlO WoRlD"
입출력 예 설명

"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.

<풀이>

def solution(s):
    
    ss = s.split(" ")
    
    answer = ''
    
    for i in range(len(ss)):
        for j in range(len(ss[i])):
            if j % 2 == 0: 
                answer += ss[i][j].upper()
            else:
                answer += ss[i][j].lower()
        
        if i != len(ss) - 1:
            answer += ' '
    
    return answer
def solution(s):
    s_split = s.split(" ")  # 받은 문자열을 단어별(스페이스 기준)으로 split해서 list에 넣어주기
    
    for k in range(len(s_split)):  # 단어 리스트에 있는 단어들 반복할 때 그 단어 길이 만큼 반복문
        s_list = list(s_split[k]) # 문자열을 새로 만들어야 하니 s_list라는 리스트에 입력

        for i in range(len(s_list)):  # 단어 리스트에 있는 단어들 반복할 때 그 단어 길이 만큼 반복문
            if i % 2 == 0:
                s_list[i] = s_list[i].upper() # 단어가 홀수면 대문자로 바꿔서 리스트에 붙여주기
            elif i % 2 == 1:
                s_list[i] = s_list[i].lower() # 단어가 짝수면 소문자로 바꿔서 리스트에 붙여주기
        s_split[k] = "".join(s_list)
        
    answer = " ".join(s_split)  # 새로 채워진 list s_split에 있는 요소들 붙여서 return (스페이스 중간에 넣어주기)

    
    return answer

1. 공백(" ")을 기준으로 문자열을 나누기

2. 문자열을 받아서 인덱스가 짝수면 대문자로, 홀수면 소문자로 문자열 지정 => 2로 나눈 나머지가 0이면 짝수로 대문자, 아니면 홀수로 소문자

2-1) 대문자로 만들기 위해 .upper() 함수 사용

2-2) 소문자로 만들기 위해 .lower() 함수 사용

3. 한 문자열의 판단이 끝나면 공백을 추가

4. 결과의 마지막 공백은 제거후 리턴

[TrY, HeLlO, WoRlD]가 된다. 여기서 (" ").join으로 문자열을 합쳐서 반환하자.

728x90
728x90

문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

제한 사항
  • 두 수는 1이상 1000000이하의 자연수입니다.
입출력 예nmreturn
3 12 [3, 12]
2 5 [1, 10]
입출력 예 설명

입출력 예 #1
위의 설명과 같습니다.

입출력 예 #2
자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.

<풀이1>

유클리드 호제법

: 최대공약수를 구하는 알고리즘

  • a와 b에 대해서(a<b) r=a%b이라고 하면, r==0이 될 때까지 b%r=r', r%r'을 했을 때 r'이 최대공약수이다.
  • 최소공배수: (a*b)/최대공약수
import math

def solution(n, m):
    # 최대 공약수 구하기
    for i in range(min(n, m), 0, -1):
        if (n % i == 0) and (m % i == 0):
            a = i
            break
    # 최소 공배수 구하기        
    for j in range(max(n, m), (n * m) + 1):
        if j % n == 0 and j % m == 0:
            b = j
            break
        
    return [a, b]

<풀이2>

def solution(n, m):
    a, b = sorted([n, m], reverse=True)
    r = 1
    while r > 0:
        r = a % b
        a, b = b, r
    answer = [a, n*m//a]
    return answer

<풀이3>

def solution(n, m):
    c, d = max(n, m), min(n, m)
    t = 1
    while t > 0:
        t = c % d
        c, d = d, t
    answer = [c, int(n*m/c)]

    return answer

<풀이4>

def solution(n, m):
    a = n
    b = m
    if n>m:
        n, m = m, n
    while m%n:
        r = m%n
        m = n
        n = r
    return [n, a*b/n]

풀이
1. a, b = n, m 중 최대 최소 값
2. (r = 나머지) r이 0일 때까지 : 유클리드 호제법
    - r = a%b
    - a, b = n, r
3. 두 수를 최대공약수로 나눈 값은 최소공배수
4. answer 리턴

 

 

 1. 유클리드 호제법

두 정수 ab의 최대공약수를 G(ab)라고 하자.

정수 abq r (b ≠ 0)에 대하여 a = bq + r,이면 G(ab) = G(br)가 성립한다.

〈증명〉
G(ab) = g라고 하자. 최대공약수의 성질에 의해 a = agb = bg이고 G(a′, b′) = 1이다.
a = bq + r로부터 r = a - bq = g(a′ - bq) 이고, g는 r의 약수이다.
G(br) = g임을 보이기 위해서는 G(b′, a′ - bq) = 1임을 보이면 된다.

귀류법을 적용하여 결론을 부정해보자.
어떤 정수 d가 존재하여 G(b′, a′ - bq) =d(≠ 1)라고 하면, b′ = dma′ - bq = dn라고 할 수 있고, a′ = bq + dndmq + dn = d(mq + n) 이므로 G(a′, b′) = 1라는 가정에 모순이다. 따라서 G(b′, a′ - bq) = 1이므로 G(bq) = g가 성립한다.

 

나머지 ( % )

>>> 10%3

1

>>> 5%3

2

728x90
728x90

문제 설명

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.


제한 조건
  • n과 m은 각각 1000 이하인 자연수입니다.

예시

입력

5 3

출력

*****
*****
*****

 

<나의 풀이>

a, b = map(int, input().strip().split(' '))
for i in range(b):            
    for j in range(a):        
        print('*', end='') 
    print()

입력값을 a, b 라 하면 , map으로 입력 받기
세로가 b 니까 겉 루프는 범위를 비로, 에이가 가로니까 안쪽 루프 범위는 에이로.
별 을 프린트 하되 끝은 띄어쓰기로 정해주기
바깥쪽 프린트는 빈 프린트를 넣어줘서 줄바꿈 하도록함.

 

<다른 사람의 풀이>

a, b = map(int, input().strip().split(' '))
answer = ('*'*a +'\n')*b
print(answer)

연산자로 초간단..

728x90
728x90

문제 설명

새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return 하세요.

제한사항
  • 놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수
  • 처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수
  • 놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수

입출력 예pricemoneycountresult
3 20 4 10
입출력 예 설명

입출력 예 #1
이용금액이 3인 놀이기구를 4번 타고 싶은 고객이 현재 가진 금액이 20이라면, 총 필요한 놀이기구의 이용 금액은 30 (= 3+6+9+12) 이 되어 10만큼 부족하므로 10을 return 합니다.

 

<나의 풀이>

def solution(price, money, count):

    for i in range(1,count+1):
        money -= price*i
    if money < 0:
        money = abs(money)
    else:
        money = 0 

    return money
  • money에서 count의 N배로 빼주어야 하므로 for문을 이용해 나타냈다.
  • money가 0보다 작을 경우, abs() 절댓값 함수를 사용해 부족한 금액을 양수로 바꿔준다.
  • money가 0보다 크거나 0일 경우, 부족한 금액이 없으므로 0으로 반환되어야 한다.

<다른사람의 풀이>

def solution(price, money, count):
    return max(0,price*(count+1)*count//2-money)
  • 산술 평균을 활용한 풀이법이다.
    • price X 1+price X 2+price X 3+price X 4+...
      = price(1+2+3+4+...)
      = price X (n(n+1)/2)
728x90
728x90

문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

제한 사항
  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.
  • s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
입출력 예sreturn
"a234" false
"1234" true

 

<풀이>

def solution(s):
    if (len(s) == 4 or len(s) == 6) and s.isdigit():
        return True

    else:
        return False

isdigit을 통해 숫자인지 확인해주고 len(s)의 길이가 (4, 6)에 포함되는지 확인해주는 코드입니다.

 

<한줄 코딩>

def solution(s):
	return s.isdigit() and len(s) in (4,6)
728x90

+ Recent posts