백준 도장깨기

[2941] 크로아티아 알파벳

솔야 2021. 4. 29. 17:56

#dz=, lj, nj

#c=, c-, d-, s=, z=

 

1. 나는 너무 꼬아서 생각하고 =,-를 먼저 삭제하고, dz, lj, nj 등의 경우만 처리하는 식으로 먼저 짰다. 틀렸다

 

2. 이번에는 공략을 슬쩍 보고 c,d,s,z,l,n인 경우에 각각 if를 걸어서 다음 께 크로아티아 알파벳을 만족하면 index를 +1,2하고 count+1, continue를 했다. 파이썬으로 구현하느라 input list 뒤에 0 두개를 추가했다. 틀렸다. 

 

3. 공략을 좀 자세히 봤다. 만약 dz=라면 d에서 count+1하고 z=을 넘어가도록 인덱스 +2를 하는 게 아니라 d에서 인덱스+2를 하고 =에서 count + 1했다

그러니까 됐다.

 

2번째 풀이랑 뭐가 다른지 잘 모르겠다. 똑같아야 정상 아닌지?

 

3번째 방법은 dz=을 보고 d에서 dz=니까 continue, z로 넘어가서 z=를 보고 continue 해서 정상적으로 작동하게 된다.

 

추가) 2번째 방법 풀이는 맞았다. 근데 이 때는 풀이가 틀려서 틀린 게 아니라 input array 에 2개나 원소 추가해 놓고 while i < len(a)-1로 해서 틀렸다... 방금 -2 로 수정하니까 잘 돌아간다. 멍청이

 

1번 방법 - 틀림

a = list(input())
#dz=, lj, nj, 나머진 =이나 -가 붙는 거랑 아닌거
#d,l,n인 경우는 그 다음 1개를 더 읽어
#-,=를 빼도 상관 없음
for i in range(len(a)):
    if a[i] == '-':
        if a[i-1] == 'd':
            a[i-1] = 'a'
# remove 같은 경우는 여러개 있으면 첫번째 것만 삭제
for i in a:
    if '-' == i:
        a.remove('-')
    if '=' == i:
        a.remove('=')    
    
result = 0
i = 0
while i < len(a):
    if i+1 != len(a):
        if a[i] == 'd' and a[i+1] == 'z':
            result = result + 1
            i = i + 1
        elif a[i] == 'l' and a[i+1] == 'j':
            result = result + 1
            i = i + 1
        elif a[i] == 'n' and a[i+1] == 'j':
            result = result + 1
            i = i + 1
        else:
            result = result + 1
    else:
        result = result + 1
    i = i + 1
print(result)
#d-zn가 원래는 3

2번 방법 - 마이너스 2로 수정하니 잘 돌아감

a = list(input())
#dz=, lj, nj
#c=, c-, d-, s=, z=
a.append('0')
a.append('0')
i = 0
result = 0
while i < len(a)-2:
    char = a[i]
    if char == 'l' or char == 'n':
        if a[i+1] == 'j':
            result = result + 1
            i = i + 2
            continue
    if char == 'c' or char == 's' or char == 'z':
        if a[i+1] == '-' or a[i+1] == '=':
            result = result + 1
            i = i + 2
            continue
    if char == 'd':
        if a[i+1] == '-':
            result = result + 1
            i = i + 2
            continue
        if a[i+1] == 'z' and a[i+2] == '=':
            result = result + 1
            i = i + 3
            continue
    result = result + 1
    i = i + 1

print(result)

3번 방법 - 잘 돌아감. 첫 성공

a = list(input())
#dz=, lj, nj
#c=, c-, d-, s=, z=
a.append('0')
a.append('0')
i = 0
result = 0
while i < len(a)-2:
    char = a[i]
    if char == 'l' or char == 'n':
        if a[i+1] == 'j':
            i = i + 1
            continue
    if char == 'c' or char == 's' or char == 'z':
        if a[i+1] == '-' or a[i+1] == '=':
            i = i + 1
            continue
    if char == 'd':
        if a[i+1] == '-':
            i = i + 1
            continue
        if a[i+1] == 'z' and a[i+2] == '=':
            i = i + 1
            continue
    result = result + 1
    i = i + 1

print(result)