cshg1995   3년 전

여기서 어디를 수정해야지 문제 출력처럼 나올까요?? 정말로 모르겠습니다 선생님들

yooshnn   3년 전

1. 알파벳 순서가 잘못되었습니다. n은 m 다음에 옵니다.

2. a에 각 알파벳 j (in c)가 있는지 반복문으로 검사할 때, j와 a[i]가 일치하지 않으면 그 때마다 -1이 리스트에 추가됩니다.

그래서 리스트 d에 지나치게 많은 -1이 들어가게 된 것입니다.

예를들어 입력이 ab 라면, d에 추가되는 내용은 

j (a) == a[0] (a) 이므로 0; break;

j (b) != a[0] (a) 이므로 -1

j (b) == a[1] (b) 이므로 1

j (c) != a[0] (a) 이므로 -1

j (c) != a[1] (b) 이므로 -1

j (d) != a[0] (a) 이므로 -1

j (d) != a[1] (b) 이므로 -1

...

와 같습니다.

최종적으로 0A -1B 1B 뒤에 -1이 각 알파벳당 두 번 (입력의 길이가 2이므로)씩 총 24 * 2 개 의 -1이 추가됩니다.

else 이하의 내용을 삭제하고, if j in a 등 다른 조건을 이용하여 각 알파벳마다 -1과 알파벳을 찾은 위치 중 하나만 추가되게 해보세요.

3. 리스트를 print(*d)와 같이 출력하면 예제 출력 형식과 같이 공백으로 구분해서 출력됩니다. 편리한 기능입니다.

cshg1995   3년 전

말씀 감사합니다 선생님 이렇게 해봤는데 맞나요??

cshg1995   3년 전

-1이 계속 나오는데 없애는 방법이 있을까요?

yooshnn   3년 전

새로 업로드 해주신 코드의 9~13번 줄을 잘 생각해 보시면, break 이하의 내용은 아무 의미가 없습니다.
if j != a[i] 조건문을 만나기도 전에 break에 걸려서 바로 반복문을 탈출하니까요.

고치는 방법은 셀 수 없이 많겠지만 그 중 한 가지를 소개해 드리겠습니다.

명제 "j in a[i]" 가 거짓이라면 "j와 a의 i번째 문자 a[i]는 서로 다르다"는 참입니다.
이 때, 문자열 a에 문자 j가 아예 존재하지 않을 가능성이 생깁니다. (만약 명제 "j in a[i]"가 참이었다면 문자열 a에는 문자 j가 반드시 존재합니다.)

따라서 if j in a[i]: 를 elif로 이어받아 elif j not in a: 조건을 검사해 볼 수 있습니다. j not in a 는 문자 j가 문자열 a에 들어있지 않다는 의미입니다.
만약 문자 j가 문자열 a에 들어있지 않다면, 우선 d에 -1을 추가하여도 좋습니다.

하지만 이미 문자열 a에 j가 존재하지 않음이 자명한데 이후의 a[i]를 탐색할 필요가 있을까요? 없습니다.
따라서 d에 -1을 추가한 다음, break로 다음 알파벳 j + 1를 검사하면 정답은 나올 것입니다.

아래 코드는 제가 설명드린 부분을 코드로 옮긴 것입니다.
정답 확인을 받았으니 꼭 필요하시면 보시고, 웬만하면 직접 구현해 보시는 걸 추천합니다..

댓글을 작성하려면 로그인해야 합니다.