암호 깨기 (Crypt Kicker)

Programming/Algorithm 2010. 9. 30. 19:07

텍스트를 암호화하는 방법 중에 보안상 취약하긴 하지만 흔하게 쓰이는 방법으로 알파벳 글자를 다른 글자로 돌리는 방법이 있다. 즉 알파벳의 각 글자를 다른 글자로 치환한다. 암호화된 것을 다시 원래대로 되돌릴 수 있으려면 두 개의 서로 다른 글자가 같은 글자로 치환되지 않아야 한다.

암호화된 텍스트가 한 줄 이상 입력되는데, 각 줄마다 서로 다른 치환 방법이 적용된다고 가정하자.
암호화 이전의 텍스트에 있는 단어는 모두 주어진 사전에 들어있는 단어라고 가정하고, 암호화된 텍스트를 해독하여 원래 텍스트를 알아내자.

입력

입력은 한 개의 정수 n이 들어있는 행으로 시작되며 그 다음 줄부터는 한 줄에 하나씩 n개의 소문자로 쓰인 단어들이 알파벳 순으로 입력된다. 이 n개의 단어들은 복호화된 텍스트에 들어갈 수 있는 단어로 구성된 사전이다. 사전 뒤에는 몇 줄의 텍스트가 입력된다. 각 줄은 앞에서 설명했던 방법에 따라 암호화된다.

사전에 들어갈 수 있는 단어의 개수는 1,000개를 넘지 않는다. 단어의 길이는 16글자를 넘지 않는다. 암호화된 텍스트에는 소문자와 스페이스만 들어가며 한 줄의 길이는 80글자를 넘어가지 않는다.

출력

각 줄을 복호화하여 표준 출력으로 출력한다. 여러 문장으로 복호화될 수 있다면 그 중 아무 결과나 출력하면 된다. 가능한 풀이가 없다면 알파벳 모든 문자를 *로 바꾼다.

입력 예
6
and
dick
jane
puff
spot
yertle
bjvg xsb hxsn  xsb   qymm   xsb rqat     xsb   pnetfn
xxxx yyy zzzz www  yyyy    aaa bbbb   ccc   dddddd

출력 예
dick and jane and puff and spot and yertle
**** *** **** *** **** *** **** *** ******

문자열을 저장할때 error C2106 : '=' : 왼쪽 피연산자는 l-value이어야 합니다. 오류가 뜰경우
> strcpy를 이용하라.

1.글자수가 사전 단어, 암호화된 텍스트 양쪽 다 유일할때는 반드시 그 단어로 치환 되어야 합니다
2.암호화된 텍스트에 있는 글자수가 사전에 없다면 복호화가 불가능 합니다.(* 표시해야함)
3.2개 이상 존재하는 단어들은 1번 과정에서 복호화된 문자들부터 하나씩 처리해나가도록 합시다...

 



'Programming > Algorithm' 카테고리의 다른 글

ACM-ICPC 2010년도 O.T. 문제 1 - Ducci Sequence  (0) 2010.10.04
ACM-ICPC 2009년도 기출 _ Candy War  (0) 2010.10.01
동맹 휴업 (Hartal)  (0) 2010.09.03
포커 패(Poker Hands)  (0) 2010.09.01
유쾌한 점퍼(Jolly Jumpers)  (0) 2010.08.31

Android 입문자를 위한 Tutorial - 3. Layout

Mobile Programming/Android 2010. 9. 28. 17:21

저번 포스팅에서 LinearLayout이라는 생소한 단어를 봤죠.
자세한 설명을 배제하고 포스팅을 마쳤는데 ,
이번에 Layout에 관한 간단한 공부를 해봅시다.

Layout은 어느정도 짐작하고 계시겠지만 위젯(버튼,텍스트뷰,에디트박스 등등)등을 배치하는 큰 규칙입니다.

Layout은 총 5가지가 있습니다 .

1. Linear Layout
2. Relative Layout
3. Absolute Layout
4. Frame Layout
5. Table Layout



Absolute Layout은 절대좌표로 위치를 지정하는 레이아웃입니다.
그런데 이런 방식은 단말기의 기종에따라,, 해상도에따라 완전히 불안정하기 때문에 현재는 deprecated 선언되었습니다.
따라서 자세한 설명은 배제합니다!


Android 입문자를 위한 Tutorial - 2. Hello Android!

Mobile Programming/Android 2010. 9. 28. 15:54

간만의 포스팅입니다 .ㅋ
사실 안드로이드 강좌 포스팅은 다른 블로그에서도 워낙 잘 되있고 해서 별로 안 땡겼는데 , 연구실 후배들의 안드로이드 학습에 도움이 될까해서 포스팅 하도록 하겠습니다.
뭐 같은 의미로다가 C언어를 모르는 예비역 오빠를 위해서도 C언어에 대해 포스팅 할지도 모르겠습니다 ㅋ 
 
현재 클래스의 진도는 출력 쪽 입니다만 , 뭐 게으르다보니 오늘은 첫 예제에 대해.

귀찮으므로 기냥 수업시간에 했던 예제와 ppt를 붙이고 싶지만 아무리 2차적 저작물이라해도 교재를 따라 수업을 했기 때문에,혹시 저작권에 저촉 될까 싶어서 모든 예제, 새로 만들겠습니다.

교재의 모든 내용을 블로그에서 다 풀어쓰는건 무리고, 핵심 기능 몇 가지만 설명하겠습니다.

Eclips, 저번 시간에 다 깔으셨죠 ?
File > New > Project > Android > Android Project 로 먼저 액티비티를 생성해주시기 바랍니다.
ProjectName , Target은 뭐 2.2 ? ㅋ Application Name은 역시 아무거나 원하시는대로 정해주시고.
PackageName은 dot이 두개 들어가는게 정석입니다. 저 같은경우는 geng.mm.jnu (전남대 멀티미디어연구실 소속 갱) 라고 쓰는게 버릇이구요 ㅋㅋ Min SDK는 상콤하게 무시하고 Finish 눌러줍니다.

그럼 처음 화면이 이렇게 뜹니다.




이제 앞으로 친숙해질 코드들입니다. ㅋㅋ

Java에 익숙하다면 이 코드에 대해 뭐 긴 설명 필요 없을거 같은데요 .ㅋ
혹시 C만 아실 분들을 위해 간단하게 설명하죠.

package는 방금 package name 에서 적어주었던 그대로 되어있습니다.
import는 include와 같이 내장함수들을 이용하기 위해 사용되죠.
이 import와 반대되는 개념으로 내가 짠 소스들을 바깥으로 꺼내기 위해 package가 사용됩니다.
다음에 다른 소스에서 import로 이용할 수도 있겠군요.

다음으로 6번 라인. public static void main(String arg) 가 자바에서 메인 역할을 했었죠. C로 말하자면 int main.
Android에서는 public class 클래스명 extends Activity 가 메인 클래스 역할을 합니다.
extends Activity라 했으니 Activity Class의 함수들을 사용할 수 있겠군요 ?
(이 말이 이해 안가시는 분들은 C++의 클래스 - 상속을 공부하시기 바랍니다)


그 클래스 안에는 onCreate가 있네요. ( 9번 ) 포커스를 맞추고 F2를 눌러주면 설명이 뜹니다. 뭐라 뜨나 볼까요.


갱 패키지 아래에 있는 OnCreate .
Called when the ac...
액티비티가 처음 생성될때 호출이 된다고 합니다.
Windows Mobile이나 Window32 API 의 WM_CREATE 메시지 정도 되겠네요.

다시 소스로 돌아가 9번 라인을 봅시다. 그러고 보니 화면 좌측에 이상한 초록색 화살표가 있네요.

이 화살표가 바로 Super Class의 함수를 Override했음을 나타냅니다. ( 역시 클래스 상속을 보세요. )

10번 라인을 보니 오버라이드는 했지만 기본적인 초기화등의 처리는 SuperClass의 처리를 빌려다 쓰고 있네요.


그리고 11번라인, 컨텐트 뷰를 설정합니다.

안드로이드는 액티비티(하나의 소스라고 생각하세요) 에서 위젯들을 포함하고 있는 레이아웃을 불러다가 화면을 구성하는 형태를 취하고 있습니다. 11번 라인에서 수행하는 작업이 res > layout 에 정의되어 R파일에 표기된 레이아웃을 불러오는 것입니다.

res > layout> main.xml을 더블클릭하여 오픈하시고 하단 탭에서 xml을 클릭해 봅시다.


LinearLayout 이라는 화면 구성방법을 사용하고, 배치방법은 수직으로 차례차례두는 Vertical 을 채택, 그리고 layout의 폭과 높이는 액티비티 전체군요.

LinearLayout 을 따르는 위젯으로 TextView 또한 정의되있습니다.
width 는 parent전체 , 즉 LinearLayout의 크기, 액티비티 전체를 차지하고
height 는 wrap_content, 텍스트 뷰 안의 내용이 잘리지 않을정도의 최소한의 크기를 차지합니다.
10번라인의 @string/hello는 values > string에 저장된 hello 변수의 내용입니다.


hello는 Hello world, blog!라고 저장이 되어 있네요. ( 액티비티를 처음 만들때 정한 이름에 따라 hello 변수의 값은 살짝 다릅니다)


즉 , hello world, blog라는 문자열이 textview에 표시가 될거고, 그 텍스트뷰는 blog activity의 setcontentview에서 지정한 레이아웃,main.xml안에 위치하니 최종적으로 blog activity가 하는일은 hello world,blog를 출력하는 일이겠군요 .

실행해보기 전에, window > Android SDK and AVD manager에서  Virtual Device를 만들어두시기 바랍니다.


실행해 봅시다.

RunAs > android Application을 선택하면 만들어둔 Virtual Devices가 실행됩니다.
부팅하는데 조금 걸리니 느긋한 마음으로 기다릴까요.


잠금을 푸시면 (자물쇠모양 화살표 오른쪽으로 드래그) 실행시킨 액티비티가 화면에 표시가 됩니다.




첫 예제 설명이 길어졌습니다. 이제부터 꼭 필요한 경우에만 (최소한 C나 Java 설명은 때려치우겠습니다) Line By Line으로 설명을 하겠습니다.