본문 바로가기

etc.

[점프 투 파이썬 6장 연습 문제] 문자열 압축하기 / Duplicate Numbers / 모스 부호 해독

반응형

1. 문자열 압축하기

input ) aaabbcccccca

output ) a3b2c6a1

 

반복문을 이용하여 문자를 하나씩 탐색하며 기준 문자를 설정한다

 

기준 문자와 다른 경우에는 기준 문자를 업데이트 시킨 후, cnt 값을 1로 초기화 한다

기준 문자와 같은 경우에는 cnt 값을 +1 한다

 

코드는 다음과 같다

 

str = input()

length = len(str)
word = ''
cnt = 1

for i in range(0, length):
    word = str[i] # for word in str 로 표현 가능
    
    if(i+1 < length):
        if(word == str[i+1]):
            cnt += 1
        else:
            print("%c%d" % (word, cnt), end="") # 문자열 포맷팅
            cnt = 1
            
    else: # 마지막 문자
        print("%c%d" % (word, cnt), end="")



""" 답안

s = input()
_c = ""
cnt = 0
result = ""
for c in s:
    if c != _c:
        _c = c
        if cnt: result += str(cnt)
        result += c
        cnt = 1
    else:
        cnt += 1
if cnt: result += str(cnt)
print(result)

"""

- for문으로 문자열을 반복시키면 한 문자씩 탐색이 가능하다 ( for c in "string" )

- print("%c" %(word)) 으로 word의 문자를 %c 자리에 대입하여 출력할 수 있다 - 문자열 포맷팅

- print( ... , end="") 으로 출력 후 줄바꿈을 막을 수 있다

 


 

2. Duplicate Numbers

0~9까지 모든 숫자가 각각 한 번씩만 사용되었는지 확인

input ) 0123654789 1123456789

output ) True False

 

1. 문자열의 길이가 10이 아닌 경우를 배제한다

2. 0~9의 숫자를 확인한다

 

or

 

1. 리스트에 한 문자씩 첨가하며 같은 수가 있는 경우를 배제한다

2. 리스트의 길이가 10인지 확인한다

 

코드는 다음과 같다

 

strr = "0123456789 315 1"

list_str = strr.split(" ")

for s in list_str:
    if len(s) != 10: print("false", end="")
    else:
        for i in range(0,11):
            if(i == 10):
                print("true", end="")
                break
            
            if(str(i) not in s): # 문자열 연산자
                print("false", end="")
                break
    print(" ", end="")



""" 답안

def Checking(s):
    result = []
    for num in s:
        if num not in result:
            result.append(num)
        else:
            return False

    return len(result) == 10

print(Checking("0123948576"))
print(Checking("1123456789"))

"""

 


 

3. 모스 부호 해독

문자열 형식의 모스 부호를 영어 문장으로 바꿔 출력

 

규칙 표가 있는 경우, 딕셔너리를 이용한다

 

코드는 다음과 같다

 

dic = {".-" : "A", "-..." : "B"}
sentence = "-... .-"

result_str = ""
#result_list = []

for s in sentence.split(" "):
    result_str += dic[s]
    #result_list.append(dic[s])

print("".join(result_str))
#print("".join(result_list))

join() 함수를 이용하여 문자열, 리스트 사이에 문자를 삽입하여 문자열로 반환할 수 있다

반응형