Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

문제 10

문제

공백으로 구분된 단어 시퀀스를 입력받아 중복된 단어를 모두 제거하고 영숫자순으로 정렬한 후 단어를 인쇄하는 프로그램을 작성하십시오.

다음과 같은 입력이 프로그램에 제공된다고 가정합니다:

hello world and practice makes perfect and hello world again

그러면 출력은 다음과 같아야 합니다:

again and hello makes perfect practice world

힌트:

질문에 입력 데이터가 제공되는 경우 콘솔 입력으로 간주해야 합니다. 중복된 데이터를 자동으로 제거하기 위해 set 컨테이너를 사용한 다음 sorted()를 사용하여 데이터를 정렬합니다.


주요 저자 솔루션: 파이썬 2

s = raw_input()
words = [word for word in s.split(" ")]
print " ".join(sorted(list(set(words))))

내 솔루션: 파이썬 3

word = input().split()

for i in word:
    if word.count(i) > 1:    # count 함수는 인수로 전달된 요소의 총 반복 횟수를 반환합니다.
        word.remove(i)     # 호출당 정확히 하나의 요소를 제거합니다.

word.sort()
print(" ".join(word))

또는

word = input().split()
[word.remove(i) for i in word if word.count(i) > 1 ]   # 컴프리헨션 메소드를 사용한 제거 작업
word.sort()
print(" ".join(word))

또는

word = sorted(list(set(input().split())))              # 입력 문자열 분할 -> 고유 요소를 저장하기 위해 set()으로 변환
                                                       # -> 정렬을 적용할 수 있도록 리스트로 변환
print(" ".join(word))

'''솔루션 작성자: Sukanya-Mahapatra
'''
inp_string = input("문자열 입력: ").split()
out_string = []
for words in inp_string:
    if words not in out_string:
        out_string.append(words)
print(" ".join(sorted(out_string)))

문제 11

문제

쉼표로 구분된 4자리 이진수 시퀀스를 입력받아 5로 나누어지는지 확인하는 프로그램을 작성하십시오. 5로 나누어지는 숫자는 쉼표로 구분된 시퀀스로 인쇄해야 합니다.

예시:

0100,0011,1010,1001

그러면 출력은 다음과 같아야 합니다:

1010

참고: 데이터는 콘솔을 통해 입력된다고 가정합니다.


힌트:

질문에 입력 데이터가 제공되는 경우 콘솔 입력으로 간주해야 합니다.


주요 저자 솔루션: 파이썬 2

value = []
items=[x for x in raw_input().split(',')]
for p in items:
    intp = int(p,2)
    if not intp % 5:
        value.append(p)

print ','.join(value)

내 솔루션: 파이썬 3

def check(x):                       # 이진수를 정수로 변환하고 5로 나누어지면 0을 반환합니다.
    total,pw = 0,1
    reversed(x)

    for i in x:
        total+=pw * (ord(i) - 48)   # ord() 함수는 ASCII 값을 반환합니다.
        pw*=2
    return total % 5

data = input().split(",")           # 여기서 입력을 받고 ',' 위치에서 분할합니다.
lst = []

for i in data:
    if check(i) == 0:               # 0이 발견되면 0으로 나누어지고 리스트에 추가됩니다.
        lst.append(i)

print(",".join(lst))

또는

def check(x):                   # check 함수는 5로 나누어지면 True를 반환합니다.
    return int(x,2)%5 == 0      # int(x,b)는 x를 문자열로, b를 밑으로 사용하여
                                # 십진수로 변환합니다.
data = input().split(',')

data = list(filter(check,data)) # filter(func,object) 함수에서 'check' 함수에 의해 True로 확인되면 'data'에서 요소를 선택합니다.
print(",".join(data))

또는

data = input().split(',')
data = list(filter(lambda i:int(i,2)%5==0,data))    # 람다는 한 줄짜리 함수를 작성하는 데 도움이 되는 연산자입니다.
print(",".join(data))

'''솔루션 작성자: nikitaMogilev
'''
data = input().split(',')
data = [num for num in data if int(num, 2) % 5 == 0]
print(','.join(data))
'''솔루션 작성자: hajimalung baba
'''
print(*(binary for binary in input().split(',') if int(binary,base=2)%5==0))

문제 12

문제:

1000과 3000 사이(두 숫자 포함)의 모든 숫자 중에서 숫자의 각 자릿수가 짝수인 숫자를 찾는 프로그램을 작성하십시오. 얻은 숫자는 한 줄에 쉼표로 구분된 시퀀스로 인쇄해야 합니다.


힌트:

질문에 입력 데이터가 제공되는 경우 콘솔 입력으로 간주해야 합니다.


주요 저자 솔루션: 파이썬 2

values = []
for i in range(1000, 3001):
    s = str(i)
    if (int(s[0])%2 == 0) and (int(s[1])%2 == 0) and (int(s[2])%2 == 0) and (int(s[3])%2 == 0):
        values.append(s)
print ",".join(values)

내 솔루션: 파이썬 3

lst = []

for i in range(1000,3001):
    flag = 1
    for j in str(i):          # 모든 정수 i는 문자열로 변환됩니다.
        if ord(j)%2 != 0:     # ord는 ASCII 값을 반환하고 j는 i의 모든 자릿수입니다.
            flag = 0          # 홀수 자릿수가 발견되면 플래그는 0이 됩니다.
    if flag == 1:
        lst.append(str(i))    # i는 문자열로 리스트에 저장됩니다.

print(",".join(lst))

또는

def check(element):
    return all(ord(i)%2 == 0 for i in element)  # all은 요소의 모든 자릿수 i가 짝수이면 True를 반환합니다.

lst = [str(i) for i in range(1000,3001)]        # 주어진 모든 숫자의 리스트를 문자열 데이터 유형으로 만듭니다.
lst = list(filter(check,lst))                   # filter는 check 조건이 실패하면 리스트에서 요소를 제거합니다.
print(",".join(lst))

또는

lst = [str(i) for i in range(1000,3001)]
lst = list(filter(lambda i:all(ord(j)%2 == 0 for j in i), lst))   # 람다를 사용하여 filter 함수 내에 함수를 정의합니다.
print(",".join(lst))

'''솔루션 작성자: nikitaMogilev
'''
# 각 숫자의 자릿수를 람다 함수로 매핑하고 모든 자릿수가 짝수인지 확인합니다.
# str(num)은 map() 및 join()을 통해 숫자를 반복할 수 있는 기회를 제공합니다.
print(','.join([str(num) for num in range(1000, 3001) if all(map(lambda num: int(num) % 2 == 0, str(num)))]))
'''솔루션 작성자: hajimalung
'''
from functools import reduce 
# reduce를 사용하여 숫자에 짝수 자릿수만 있는지 확인합니다.
def is_even_and(bool_to_compare,num_as_char):
    return int(num_as_char)%2==0 and bool_to_compare

print(*(i for i in range(1000,3001) if reduce(is_even_and,str(i),True)),sep=',')

문제 13

문제:

문장을 입력받아 글자 수와 숫자 수를 계산하는 프로그램을 작성하십시오.

다음과 같은 입력이 프로그램에 제공된다고 가정합니다:

hello world! 123

그러면 출력은 다음과 같아야 합니다:

LETTERS 10
DIGITS 3

힌트:

질문에 입력 데이터가 제공되는 경우 콘솔 입력으로 간주해야 합니다.


주요 저자 솔루션: 파이썬 2

s = raw_input()
d = {"DIGITS":0, "LETTERS":0}
for c in s:
    if c.isdigit():
        d["DIGITS"]+=1
    elif c.isalpha():
        d["LETTERS"]+=1
    else:
        pass
print "LETTERS", d["LETTERS"]
print "DIGITS", d["DIGITS"]

내 솔루션: 파이썬 3

word = input()
letter,digit = 0,0

for i in word:
    if ('a'<=i and i<='z') or ('A'<=i and i<='Z'):
        letter+=1
    if '0'<=i and i<='9':
        digit+=1

print("LETTERS {0}\nDIGITS {1}".format(letter,digit))

또는

word = input()
letter, digit = 0,0

for i in word:
    if i.isalpha(): # 알파벳이면 True를 반환합니다.
        letter += 1
    elif i.isnumeric(): # 숫자이면 True를 반환합니다.
        digit += 1
print(f"LETTERS {letter}\n{digits}") # 두 가지 다른 유형의 형식 지정 방법이 두 솔루션 모두에 표시됩니다.

''' 솔루션 작성자: popomaticbubble
'''
import re

input_string = input('> ')
print()
counter = {"LETTERS":len(re.findall("[a-zA-Z]", input_string)), "NUMBERS":len(re.findall("[0-9]", input_string))}

print(counter)

'''솔루션 작성자: MarkisLandis
'''

sen = input("").split(" ")
alp, digit = 0, 0

for item in sen:
    lst = [char for char in item]
    for j in lst:
        if 64 < ord(j) < 123:
            alp += 1
        if j.isdigit():
            digit += 1
print(f"LETTERS : {alp} \n DIGITS : {digit}")
'''솔루션 작성자: hajimalung
'''
# reduce를 사용하여 계산합니다.
from functools import reduce

def count_letters_digits(counters,char_to_check):
    counters[0] += char_to_check.isalpha()
    counters[1] += char_to_check.isnumeric()
    return counters

print('LETTERS {0}\nDIGITS {1}'.format(*reduce(count_letters_digits,input(),[0,0])))

결론

위의 모든 문제는 대부분 문자열 관련 문제입니다. 솔루션의 주요 부분에는 문자열 관련 함수와 코드를 더 짧은 형태로 작성하기 위한 컴프리헨션 메소드가 포함됩니다.

이전 날로 가기

다음 날로 가기

토론