본문 바로가기

백준 write-up/정렬 & 그리디

[백준] 단어 퍼즐 : 9946번 - Python

728x90
반응형

https://www.acmicpc.net/problem/9946

 

9946번: 단어 퍼즐

케이스마다 번호를 붙여서 예제출력과 같은 형식으로 출력한다. 준하가 알파벳을 제대로 회수했다면 same 을, 잘못 회수했다면 different 를 출력한다.

www.acmicpc.net

 

 

 

문제를 풀면서 몰랐던 개념

 

[Python] 문자열(string)을 한 글자씩 끊어서 리스트로 바꾸기

-> 입력 받은 문자열을 하나하나 분리해서 리스트에 저장하고 싶을 때 사용!

str = "love"
print(list(str))

>>> ['l','o','v','e']

a = list(str)
print(a)

>>> ['l','o','v','e']

 

 

 

문제의 접근 방법

 

입력 받은 문자열을 하나하나씩 끊어서 저장한 후 정렬하기!

 

 

 

내가 막혔던 부분

 

for문 사용 -> 오답

while문 사용 -> 정답

 

 

 

문제 풀이 방법

 

케이스마다 번호를 붙여서 출력하기 위해 i=1(1번부터 시작하므로) 선언 -> while문을 돌려서 처음 완성한 단어(a), 떨어뜨린 다음 회수한 알파벳들(b) 입력 받기 -> 만약 a,b값이 "END"라는 단어라면 반복문 탈출 -> 그게 아니라면 입력된 단어 a,b를 알파벳 하나하나씩 끊어서 리스트 A,B에 저장한 후 오름차순으로 정렬(비교를 위해) -> 만약 A와 B가 같다면 same 출력, 다르다면 different 출력!

 

 

 

처음 작성했던 오답 코드

for i in range(1, 1000):
    a = input()
    b = input()
    if a == "END" and b == "END":
        break
    else:
        A = sorted(list(a))
        B = sorted(list(b))
        if A == B:
            print("Case", str(i)+ ": same")
        elif A != B:
            print("Case", str(i)+ ": different")

* 아직 왜 for문은 틀리고 while문은 맞는지 알아내지 못함...

 

 

 

소스코드

# 정답 소스코드!!!

i = 1

while True:
    a = input()
    b = input()
    if a == "END" and b == "END":
        break
    else:
        A = sorted(list(a))
        B = sorted(list(b))
        if A == B:
            print("Case", str(i)+ ": same")
        elif A != B:
            print("Case", str(i)+ ": different")
            
        i += 1	# 반복문 한 번씩 돌 때마다 1씩 늘어남
728x90
반응형