본문 바로가기
Problem Solving/SWEA

[ SWEA ] D3 - 1213, 1234, 1240, 3314, 4751 - python 문제풀이

by IM조이 2021. 7. 2.

1213 String
두 가지 접근법
- 방법 1 ) for문 돌면서 매번 체크
- 방법 2 ) 카운트 함수 활용

# 방법 1 - for문 돌면서 일치하는 첫 글자 나오면 확인하기
for tc in range(10):
    N = int(input())
    target = input()
    sentence = input()
    result = 0
    for i in range(len(sentence)):
        if sentence[i] == target[0]:
            if sentence[i:i+len(target)] == target:
                result += 1
    print("#{} {}".format(N,result))
    
# 방법 2 - count 함수 활용
for tc in range(10):
    N = int(input())
    target = input()
    sentence = input()
    print("#{} {}".format(N,sentence.count(target)))

(위) count 함수 활용 - 방법2  (아래) for문 돌면서 체크하는 방법 1

 

1234 비밀번호
접근법 : 새로운 문자열을 만들어나가되, 직전 문자와 같으면 (1)추가하지 않고 (2)새로운 문자열 맨 마지막 글자 제외

for tc in range(10):
    l,pw = input().split()
    tmp = ''
    for num in pw:
        if tmp and tmp[-1] == num:
            tmp = tmp[:-1]
        else:
            tmp += num
    print("#{} {}".format(tc+1,tmp))

 

1240 단순2진암호코드
접근법
- 주어진 해독코드에 따르면 모든 숫자의 맨 뒤가 '1' 이고 앞은 '1' 이거나 '0' => 뒤에서 7배수만큼 8번 잘라내는게 확실
- 잘라낸 코드를 앞에서부터 7개씩 해독해서 값을 비교하고, 문제에서 제시한 조건에 따라 출력

n = {'0001101':0,'0011001':1,'0010011':2,'0111101':3,'0100011':4,
    '0110001':5,'0101111':6, '0111011':7,'0110111':8,'0001011':9}
for tc in range(int(input())):
    N,M = map(int, input().split())
    code = [input() for _ in range(N)]
    found = False
    for i in range(N):
        for j in range(M-1,-1,-1):
            if code[i][j] == '1': # 1을 뒤에서 찾았으면 더이상 찾을 필요 없음
                r_idx = i
                c_idx = j
                found = True
                break
        if found:
            break
    t = code[r_idx][c_idx-55:c_idx+1]
    even,odd = 0,0
    for k in range(7):
        if k%2==0:
            even += n[t[7*k:7*(k+1)]]
        else:
            odd += n[t[7*k:7*(k+1)]]
    r = even*3 + odd
    if (r+n[t[-7:]])%10 != 0:
        r = 0
    else:
        r = even+odd+n[t[-7:]]
    print("#{} {}".format(tc+1,r))

 

3314 보충학습과 평균
푸는 방법이 매우 다양한 문제. 조건이 까다롭지 않아서 람다식으로 해결.

for tc in range(int(input())):
    print("#{} {}".format(tc+1,sum(list(map(lambda x:x if x>=40 else 40,list(map(int, input().split())))))//5))

 

4751 다솔이의 다이아몬드 장식
규칙만 찾으면 구현은 별로 어렵지 않음. 주어진 문자열의 길이의 딱 절반까지만 구해도 나머지 뒷부분은 반복.

for tc in range(int(input())):
    s = input()
    time = len(s)
    for i in range(5):
        if i==0 or i==4:
            print("..#."*time+'.')
        elif i==1 or i==3:
            print(".#"*(2*time)+'.')
        else:
            print("#.",end="")
            print(".#.".join(list(s)),end="")
            print(".#")

댓글