AngelPlayer`s Diary

링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15FZuqAL4CFAYD&categoryId=AV15FZuqAL4CFAYD&categoryType=CODE&problemTitle=1240&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

 

문제 해석

암호는 총 8자리로 이루어져 있음

7자리는 상품 고유 번호, 마지막 자리는 검증 코드

 

T : 테스트 케이스의 수

N : 배열의 세로 크기 (1≤N<50)

M : 배열의 가로 크기 (1≤M<100)

 

 

- 입력

T

N M

M개의_가로_숫자 * N개의_줄

 

- 출력

#T 정상적인_암호코드_숫자_합

 

 

- 해석

각 행은 0과 1로 이루어져 있으며, 그중 1이 포함된 N을 분석하여 값을 찾아야 한다.

1이 들어간 행은 모두 동일한 값을 가지므로 그 중 하나만 분석하면 된다.

 

분석 시 0, 1의 조합으로 총 길이가 8인 암호를 찾아내야 하므로 56(7개의 0과 1 -> 1개의 암호)개의 숫자를 찾아야한다.

 

암호코드를 (위에 표시된 테이블) 봤을 때, 마지막이 모두 1로 끝나는 것을 통해서 숫자를 확인할 때 맨 뒤에서 부터 확인하면 조금 더 쉽게 풀 수 있을 것을 예상할 수 있다.

 

이렇게 찾은 56개의 숫자를 통해 8글자 암호를 분석해 냈을 때, 

(1번 + 3번 + 5번 + 7번)*3 + 2번 + 4번 + 6번 + 8번(검증코드) = 10의 배수가 나왔을 때만 모든 암호를 더한 값을 출력하고, 그렇지 않은 경우 0을 출력한다.

 

 

 

코드

 

 

 

코드 해석

(line 3) 입력 받은 데이터에서 유효한 행의 1뒤에 있는 0을 모두 제거하기 위해 (==뒤에서 부터 확인) 데이터를 역순으로 저장할 것이다. 이때 저장한 값을 분석하기 위해서 다시 역순으로 정렬하는 것을 방지하기 위해 암호코드 자체를 역순으로 저장하였다. 

 

(line 13, 17) 위에서 설명한 역순으로 저장을 수행한다.

 

(line 19, 21) 코드를 정해진 방법으로 해독을 수행하여 10의 배수가 나오는 경우 올바른 암호코드를 찾은 것으로 간주한다. 그렇지 않으면 0을 저장하여 올바르지 않은 코드임을 명시한다.

 

 

발생한 문제 & 해결 방안

문제 자체를 이해하는데 상당한 시간이 소요되었다. 결국 제대로 이해하지 못하여 같이 문제를 푸는 친구에게 도움을 구하였다.

 

코드를 구현하는데 사용하는 조건은 출제자가 명시하는 것 뿐만 아니라 입출력 데이터에서 직접 해석하여 찾아야 한다는 사실을 깨달았다.

 

17번 라인에서 암호를 찾는데 사용하는 숫자 개수를 착각하여 값이 제대로 저장되지 않는 현상이 발생하였다.

 

 

 

 

 

해당 코드는 에디터가 코드 연습을 위해 직접 작성하였습니다.

혹시 오류가 있거나 더 좋은 코드 방향성을 아시는 분은 댓글로 남겨주시면 감사하겠습니다!

source : https://github.com/ssh5212/conding-test-practice

공유하기

facebook twitter kakaoTalk kakaostory naver band