티스토리 뷰

 

 

SW Expert Academy

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

swexpertacademy.com

 

 

단순 2진 암호코드를 응용한 문제다.

 

 

[SWEA 1240] 단순 2진 암호코드 java

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제풀이 암호 코드가 주어졌을 때 정상인지 아닌지를 판별하는 문제다. 암호 코드는 총

woojeenow.tistory.com

 

문제풀이

 

전체적인 로직은 단순 2진 암호코드와 비슷하지만 다른 점이 3가지 정도가 있다.

 

  1. 입력이 2진수가 아닌 16진수로 주어진다.
  2. 암호코드의 비율이 아래 그림과 같이 n배로 입력될 수 있다.
  3. 한 테스트 케이스 당 암호코드가 여러 개 존재할 수 있다.

 

 

16진수를 2진수로!

 

16진수를 2진수로 쉽게 바꿔주기 위해서 hToB라는 배열에 0부터 F(15)까지 각 4개의 비트들을 저장해두었다.

또 배열에서 찾은 암호코드들을 2진수로 변환한 값을 저장하기 위해 map배열의 가로를 4배 크게 잡았다.

 

 

 

암호코드의 비율이 n배면?

 

암호코드를 오른쪽 끝에서부터 찾을 때 1, 0, 1의 개수를 세어준다.

1, 0, 1의 개수 중에서 가장 작은 수로 나눠서 주어진 비율을 알아내고 미리 세팅해놓은 cToNum 배열에서 숫자를 찾는다.

cToNum은 암호코드를 숫자로 바꾸기 위한 배열이고 [1의 개수][0의 개수][1의 개수] 비율로 찾을 수 있도록 3차원으로 선언해주었다.

 

 

암호코드가 1개가 아닌 여러 개일 때는?

 

아래 그림과 같이 바코드가 여러 개 있을 수가 있다.

암호코드를 찾기 위해 오른쪽에서부터 탐색했을 때 1이 나오고 그 위에 있는 숫자가 0이면 바코드의 우상단인 것을 알 수 있다.

바코드의 우상단 아래로는 같은 암호코드가 반복되기 때문에 우상단에서 찾은 암호코드만 계산해주면 된다.

이렇게 하면 여러 개의 암호코드를 스캔할 수 있다.

 

 

Java 코드

 

 

'Problem Solving > SWEA' 카테고리의 다른 글

[SWEA 1240] 단순 2진 암호코드 Java  (0) 2021.08.03
[SWEA 1233] 사칙연산 유효성 검사 C++  (0) 2021.08.02
[SWEA 1232] 사칙연산 C++  (0) 2021.08.02
[SWEA 1231] 중위순회 C++/Java  (0) 2021.08.02
[SWEA 1238] Contact C++  (2) 2021.07.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함