2017.07.05 01:36


문제12 암호깨기 (Crypt Kicker)


A common but insecure method of encrypting text is to permute the letters of the alphabet. In other words, each letter of the alphabet is consistently replaced in the text by some other letter. To ensure that the encryption is reversible, no two letters are replaced by the same letter.

Your task is to decrypt several encoded lines of text, assuming that each line uses a different set of replacements, and that all words in the decrypted text are from a dictionary of known words.

Input

The input consists of a line containing an integer n, followed by n lowercase words, one per line, in alphabetical order. These nwords compose the dictionary of words which may appear in the decrypted text. Following the dictionary are several lines of input. Each line is encrypted as described above.

There are no more than 1,000 words in the dictionary. No word exceeds 16 letters. The encrypted lines contain only lower case letters and spaces and do not exceed 80 characters in length.

Output

Decrypt each line and print it to standard output. If there are multiple solutions, any one will do. If there is no solution, replace every letter of the alphabet by an asterisk.

Sample Input

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

Sample Output

dick and jane and puff and spot and yertle
**** *** **** *** **** *** **** *** ******


# Source (My Solution)

ddddddddddddddddddd
저작자 표시
신고


Posted by injunech
2017.07.05 01:21


문제1 3n+1문제

출처 : http://www.programming-challenges.com/


Consider the following algorithm to generate a sequence of numbers. Start with an integer n. If n is even, divide by 2. If n is odd, multiply by 3 and add 1. Repeat this process with the new value of n, terminating when n = 1. For example, the following sequence of numbers will be generated for n = 22:

22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

It is conjectured (but not yet proven) that this algorithm will terminate at n = 1 for every integer n. Still, the conjecture holds for all integers up to at least 1, 000, 000.

For an input n, the cycle-length of n is the number of numbers generated up to and including the 1. In the example above, the cycle length of 22 is 16. Given any two numbers i and j, you are to determine the maximum cycle length over all numbers between i and j, including both endpoints.

Input

The input will consist of a series of pairs of integers i and j, one pair of integers per line. All integers will be less than 1,000,000 and greater than 0.

Output

For each pair of input integers i and j, output ij in the same order in which they appeared in the input and then the maximum cycle length for integers between and including i and j. These three numbers should be separated by one space, with all three numbers on one line and with one line of output for each line of input.

Sample Input

1 10
100 200
201 210
900 1000

Sample Output

1 10 20
100 200 125
201 210 89
900 1000 174




# Source (My Solution)

#include 

//#define DBG

void main(void) {
	int a;
	int b;

	int tmp;
	int i;
	int x;
	int loop_count;
	int max_count =0;

	scanf("%d", &a);
	scanf("%d", &b);
	
	// If A is Biger than B,  Swap A and B
	if (a > b) {
		tmp = a;
		a = b;
		b = tmp;
	}
	
	for (i = a; i <= b; i++) {
		// Start, Init
		x = i;
		loop_count = 1;
#ifdef DBG
		printf("[%d] =============== \n", i);
#endif

		// Loop
		while (x != 1) {
			if ((x & 1) == 0) {	// even
#ifdef DBG
				printf("[%d] is EVEN\n", x);
#endif
				x = x / 2;
			}
			else {	// odd
#ifdef DBG
				printf("[%d] is ODD\n", x);
#endif
				x = (x * 3) + 1;
			}
			loop_count++;
		}

		if (max_count < loop_count)
			max_count = loop_count;

	}

	printf("%d %d %d", a,b, max_count);
	
}

 


저작자 표시
신고


Posted by injunech
2017.07.04 02:41


[초급] 문자열 비교


01. 문자열 길이 구하기
int main()
{
    char *s1 = "Hello";       // 포인터에 문자열 Hello의 주소 저장
    char s2[10] = "Hello";    // 크기가 10인 char형 배열을 선언하고 문자열 할당

    printf("strlen = %d\n", strlen(s1));    // 5 : strlen 함수로 문자열의 길이 구함
    printf("strlen = %d\n", strlen(s2));    // 5 : strlen 함수로 문자열의 길이 구함

    return 0;
} 


02. 문자열 비교하기

 값이 같으면 0, 앞에 것이 크면 1, 뒤에 것이 크면 -1

int main()
{
    // a는 ASCII 코드로 97
    // b는 ASCII 코드로 98
    // c는 ASCII 코드로 99

    printf("%d\n", strcmp("a", "a"));    //  0: a와 a는 같으므로 0
    printf("%d\n", strcmp("b", "a"));    //  1: b와 a 중에서 b가 크므로 1
    printf("%d\n", strcmp("b", "c"));    // -1: b와 c 중에서 c가 크므로 -1

    return 0;
}




저작자 표시
신고


Posted by injunech
2017.07.04 02:08


[초급] 문자열 입력받기


01. Char 변수에 문자 입력 받기

1) scanf 사용하기 (기본)
int main()
{
    char c;

    scanf("%c", &c);    // 문자를 입력받아서 변수에 저장
    printf("%c\n", c);    // 변수의 내용을 출력

    return 0;
}

 2) getchar 사용하기
int main()
{
    char c = getchar();    // 문자 하나를 입력받음
    printf("%c\n", c);
    return 0;
}



02. Char 배열에 문자열 입력 받기

int main()
{
    char string1[10];    // 크기가 10인 char형 배열을 선언
    char string2[30];    // 크기가 30인 char형 배열을 선언

    scanf("%s", string1);     // 표준 입력을 받아서 배열 형태의 문자열에 저장
    printf("%s\n", string1);  // 문자열의 내용을 출력

    scanf("%[^\n]s", string2);    // 공백까지 포함하여 문자열 입력받기
    printf("%s\n", string2);

    return 0;
}



03. 메모리 할당하여 문자열 포인터 변수에 문자열 입력 받기

 1) 오류

int main()
{
    char *string = "Hello";    // 문자열 포인터 선언, 문자열 할당

    scanf("%s", string );
    // 실행 에러,
    // 문자열 리터럴의 주소를 가르키는 포인터에 저장된 변수는 읽기만 가능하고 쓰기 불가능합니다.

    printf("%s\n", string );

    return 0;
}

 2) 정상

int main()
{
    char *string = malloc(sizeof(char) * 10);    // char 10개 크기만큼 동적 메모리 할당

    scanf("%s", string);      // 표준 입력을 받아서 메모리가 할당된 문자열 포인터에 저장
    printf("%s\n", string);   // 문자열의 내용을 출력

    free(string);    // 동적 메모리 해제
    return 0;
}


저작자 표시
신고


Posted by injunech
2017.05.30 23:02


Tizen Watch Application API


State Diagram

Refer to the following state diagram to see the possible transitions and callbacks that are called while transition.


Required Header

#include <watch_app.h> #include <watch_app_efl.h>

Overview

The Watch Application API provides functions for handling Tizen watch application state changes or system events. Tizen watch application can be shown in the idle screen of the wearable device. This API also provides time utility functions for developting Tizen watch applications. You can develop a watch application that shows exact time using these time utility functions. For low powered wearable device, Tizen watch application supports a special mode that is named 'ambient'. When the device enters ambient mode, Tizen watch application that is shown in the idle screen can show limited UI and receives only ambient tick event at each minute to reduce power consumption. The limitation of UI that can be drawn in the ambient mode depends on the device. Usually, you should draw black and white UI only, and you should use below 20% of the pixels of the screen. If you don't want to draw your own ambient mode UI, you can set the 'ambient-support' attribute of the application as 'false' in the tizen-manifest.xml. Then, the platform will show proper default ambient mode UI.

This API provides interfaces for the following categories:

  • Starting or exiting the main event loop
  • Registering callbacks for application state change events including timetick events
  • Registering callbacks for basic system events
  • Time related utility APIs for watch applications

Registering Callbacks for Application State Change Events

The state change events for Tizen watch application is similar to the Tizen UI applications. See the Application. In Tizen watch application, an ambient changed event is added to support ambient mode. Time tick related events are also added to provide an exact time tick for the watch application.

CallbackDescription
watch_app_create_cb()Hook to take necessary actions before the main event loop starts. Your UI generation code should be placed here so that you do not miss any events from your application UI.
watch_app_control_cb()Hook to take necessary actions when your application called by another application. When the application gets launch request, this callback function is called. The application can get information about what is to be performed by using App Control API from app_control handle.
watch_app_resume_cb()Hook to take necessary actions when an application becomes visible. If anything is relinquished in app_pause_cb() but is necessary to resume the application, it must be re-allocated here.
watch_app_pause_cb()Hook to take necessary actions when an application becomes invisible. For example, you might wish to release memory resources so other applications can use these resources. It is important not to starve the application in front, which is interacting with the user.
watch_app_terminate_cb()Hook to take necessary actions when your application is terminating. Your application should release all resources, especially any allocations and shared resources must be freed here so other running applications can fully use these shared resources.
watch_app_ambient_changed_cb()Hook to take necessary actions when the device enters ambient mode. Your application needs to adopt its UI to be compatibile with the ambient mode. Note that, you only can use very limited colors and pixels of the screen when the device is in the ambient mode. Usually, you should use only black and white to draw the ambient mode UI and use below 20% of the pixels of the screen. If you don't want to draw your own ambient mode UI, you can set the 'ambient-support' attribute of the application as 'false' in the tizen-manifest.xml. Then, the platform will show proper default ambient mode UI.
watch_app_time_tick_cb()This callback is called at each second when your application is visible. This callback is not called when your application is not visible or the device is in ambient mode. You can use this tick to update the time that is being displayed by your watch application.
watch_app_ambient_tick_cb()This callback is called at each minute when the device is ambient mode. You can use this tick to update the time that is being displayed by your watch application while the device is in ambient mode. You should not do a job that takes long time in this callback. You should update the UI as fast as possible in this callback. The platform might make the device to sleep in short time after the ambient tick expires.


출처 : https://developer.tizen.org/ko/development/api-references/native-application?redirect=/dev-guide/2.3.2/org.tizen.native.wearable.apireference/group__CAPI__WATCH__APP__MODULE.html&langredirect=1

저작자 표시
신고

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

Watch Application API  (0) 2017.05.30
SIGNATURE_NO_DEVICE_PROFILE [78]  (0) 2017.05.08
[Tizen] 타이젠 Privilege 설정  (0) 2017.02.15


Posted by injunech
2017.05.08 02:32


Tizen Studio 를 통해 개발한 Tizen App 설치시에 78에러 해결 방법


# 문제 로그

Cannot install application.

SIGNATURE_NO_DEVICE_PROFILE [78]


start process (install)

error : 78

end process (fail)

processing result : SIGNATURE_NO_DEVICE_PROFILE [78] failed

spend time for pkgcmd is [4356]ms

cmd_ret:78


# 해결 방법

 Tizen Device 연결된 목록에서 컴퓨터와 Smart Debug Bridge로 연결된 자신의 단말 정보에서 마우스 우측버튼을 눌러서

"Permit to install applications" 버튼을 눌러줘서 해당 단말의 인스톨 권한을 주면 완료.


Right click on device in Connection Explorer and select Permit to install applications

or copy device-profile.xml to /home/develope directory on device


# Tizen 공식 홈페이지 Error 78 에 대한 자세한 정보

https://wiki.tizen.org/wiki/SDK#error_78






저작자 표시
신고

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

Watch Application API  (0) 2017.05.30
SIGNATURE_NO_DEVICE_PROFILE [78]  (0) 2017.05.08
[Tizen] 타이젠 Privilege 설정  (0) 2017.02.15


Posted by injunech
2017.04.10 00:57


hyperlink in JLabel


AWT, Swing 과 같은 Java GUI 를 이용한 개발시에
텍스트 라벨등을 클릭한 경우 HTTP 접속, Email 연결이 되도록 하는 방법.


/**
 * Example of a jLabel Hyperlink and a jLabel Mailto
 */

import java.awt.Cursor;
import java.awt.Desktop;
import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 *
 * @author ibrabelware
 */
public class JLabelLink extends JFrame {
    private JPanel pan;
    private JLabel contact;
        private JLabel website;
    /**
     * Creates new form JLabelLink
     */
    public JLabelLink() {
        this.setTitle("jLabelLinkExample");
        this.setSize(300, 100);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);

        pan = new JPanel();
        contact = new JLabel();
        website = new JLabel();

        contact.setText("<html> contact : <a href=\"\">YourEmailAddress@gmail.com</a></html>");
        contact.setCursor(new Cursor(Cursor.HAND_CURSOR));

        website.setText("<html> Website : <a href=\"\">http://www.google.com/</a></html>");
        website.setCursor(new Cursor(Cursor.HAND_CURSOR));

    pan.add(contact);
    pan.add(website);
        this.setContentPane(pan);
        this.setVisible(true);
        sendMail(contact);
        goWebsite(website);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /*
         * Create and display the form
         */
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new JLabelLink().setVisible(true);
            }
        });
    }

    private void goWebsite(JLabel website) {
        website.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                try {
                    Desktop.getDesktop().browse(new URI("http://www.google.com/webhp?nomo=1&hl=fr"));
                } catch (URISyntaxException | IOException ex) {
                    //It looks like there's a problem
                }
            }
        });
    }

    private void sendMail(JLabel contact) {
        contact.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                try {
                    Desktop.getDesktop().mail(new URI("mailto:YourEmailAddress@gmail.com?subject=TEST"));
                } catch (URISyntaxException | IOException ex) {
                    //It looks like there's a problem
                }
            }
        });
    }
}


저작자 표시
신고


Posted by injunech
2017.03.11 14:27


javaservice.exe 란 33kb 짜리 파일 하나로 간단하게 윈도우 서비스에 등록 / 삭제가 가능하다. 

binary 패키지를 받아서 압축을 풀어보면 다양한 예제 파일이 같이 공존하니 충분히 참고가 될것이다. 
URL : http://forge.objectweb.org/projects/javaservice/ 

참고로 본인은 이런식으로 등록했다. 

testinstall.bat

set JAVA_HOME=c:\jdk
set JAVASERVICE=JavaService.exe

%JAVASERVICE% -install ${Service에 등록될 이름} %JAVA_HOME%/jre/bin/server/jvm.dll -Djava.class.path=%CLASSPATH% com.dasida.TestMain -params INSTALL_DIR=c:\test -out c:\out.log -err c:\err.log 
pause


testuninstall.bat

set JAVASERVICE=JavaService.exe
%JAVASERVICE% -uninstall ${Service에 등록된 이름}


Service 의 시작 과 중지도 간단하다. 

시작 > net start test 

중지 > net stop test

  

 

1. 우선 아래 파일을 다운로드 받으세요.

 

                instsrv_srvany.zip

 

 

instsrv.exe,srvany.exe 두개의 파일이 들어있습니다.

 

파일에 대한 설명은 techbug님의 블로그에서 발췌했습니다.

 

● instsrv.exe
   - exe 파일을 서비스로 등록시켜주는 프로그램
   - 등록시 : instsrv [서비스명] [등록할exe파일]
   - 삭제시 : instsrv [서비스명] remove
   - 더 자세한 내용은 usage 참조

 

● srvany.exe
   - Windows .NET 서비스 리소스킷

 


2. 압축을 푸시고 등록하고자 하는 프로그램과 같이 아무 디렉토리에나 넣어두세요.
    제 경우에는 C:\TroubleAlarmService 디렉토리에 instsrv.exe, srvany.exe,

    개발한 서버 프로그램을 같이 위치 시켰습니다.

 

 

3. 시작 → 실행 → cmd : 프로그램이 들어있는 디렉토리로 이동하여 아래 명령 실행

    C:\TroubleAlarmService> instsrv.exe TroubleAlarmService C:\TroubleAlarmService\srvany.exe

   
   TroubleAlarmService는 구동될 서비스 명이 됩니다. 각자 원하는 서비스 명을 입력하시면 됩니다.

 

 

4. 시작 → 실행 → regedit : 레지스트리 편집기 실행
   HKEY_LOCAL_MACHENE\SYSTEM\CurrentControlSet\Services 를 보면 등록하신 서비스 명으로

   폴더가 생성되어 있을겁니다.  제 경우에는 TroubleAlarmService가 되겠죠.. 폴더를 선택하고,

   마우스 오른쪽 '새로만들기 -> 키'를 선택합니다. 그러면 밑에 폴더가 하나 생성되는데요.

   폴더명을 Parameters로 해주세요.

 

 

5. Parameters 폴더를 선택하고 레지스트리 편집기 오른쪽 영역에서 마우스 오른쪽 버튼을 눌러서

   '새로 만들기 → 문자열값'을 선택하고 아래 처럼 입력합니다.


      이름 : Application
      값 : java -classpath c:\TroubleAlarmService TroubleAlarmService
  

   저장한 후 편집기를 닫습니다.

 

 

6. 서비스를 구동 시키는 일만 남았습니다. 두가지 방법이 존재합니다.
  

   시작 → 제어판 → 관리도구 → 서비스 : TroubleAlarmService 찾아서 시작
   시작 → 실행 → cmd                                   
   C:\> net start TroubleAlarmService
   C:\> net stop TroubleAlarmService


이렇게 하고 서비스가 동작하는 것을 확인했습니다.

 

 

 

일반적으로 Windows 에서의 Java Application은 Command Console을 사용하여 구동된다.

이 방식은 아래와 같은 단점을 가지고 있다. 

1. 사용자 실수로 인해 Command Console에 Mouse Click이 발생하면 Application이 Hold됨.
2. 사용자가 Logout하면 해당 Application이 종료됨.
3. 특별히 제약이 없는 경우 터미널 서버나 원격 데스크탑 Application을 사용하여 같은 Application을

    각 User별로 계속 구동할 수 있음.

이런 단점을 극복하기 위해 Unix에서는 Background Process로 구동시키면 되지만,

Windows는 그 태생이 End User를 위한 DeskTop이기에 그 개념이 없다.

그와 유사한 개념이 Windows Service이다.
그러나 애석하게도 현재 JDK는 Windows Service를 사용하는 API를 제공하고 있지는 않다.

그로 인해 Apache나 InstallAnywhere등의 Application 벤더들은 그들만의 방법으로 Service등록을

가능하게 해서 사용하고 있는 실정이다.

지금 제시할 방법은 이러한 Java Application을 Windows Service로 등록하는 간단한 방법이다.
프로젝트에 적용중인 모듈에 적용하기 위해 여러 자료를 찾다 발견한 매우 간단한 방법이다.

지금까지 제가 배포한 모듈의 경우 모두 이 방법을 사용해 서비스에 등록했다.
방법은 다음과 같다.

JavaService.exe 에 구동 Argument로 설정값을 넘겨주면 서비스 등록이 완료되게 된다.

실제 사용은 아래의 방법을 따른다.

1. JavaService.exe를 구한다.
2. 서비스 등록용 batch파일을 만든다. 아래는 필자가 사용하는 파일의 예이다.

C:JavaService -install MyApp %JAVA_HOME%jre inserverjvm.dll -Djava.class.path=.;C:MyAppclasses -start MyApp.StartApp -params INSTALL_DIR=C:MyAppr -out C:MyApplogsstdout.log -err C:MyApplogsstderr.log -auto

Java Service가 사용하는 각 옵션 값은 다음과 같습니다.

      -install COM : 윈도우 서비스에 COM 란 이름으로 등록

 

      %JVM_PATH% : Java 서비스 등록을 위해 사용하는 dll. JDK나 JRE가 설치된 곳에 있음.
                               {JDK_HOME}/jre/bin/[server|client]/jvm.dll
                               {JRE_HOME}/bin/[server|client]/jvm.dll
 
       -Djava.class.path : 프로그램 실행을 위한 Java Classpath. 
       -Xms64M -Xmx128M : class path 이후에는 Java VM 옵션
       -start : main() 메소드가 있는 시작 클래스명 
       -out : 서비스 등록 후 출력하는 로그
       -err : 서비스 등록 후 출력하는 에러 로그
       -current : 프로그램의 실행 위치

       -description : 서비스에 등록될때 해당 서비스의 설명 내용



3. 서비스 해지용 batch파일을 만든다. 아래는 필자가 사용하는 파일의 예이다. 
         C:JavaService -uninstall MyApp

더 자새한 내용은 http://forge.ow2.org/projects/javaservice/ 을 참고하기 바란다.

저작자 표시
신고


Posted by injunech
2017.03.11 11:49


WindowBuilder Java GUI(AWT,SWT,Swing) Tool

Eclipse Plug-In 설치방법



<Tools> eclipse의 GUI(AWT/Swing)플러그인(window builder)

 

1. 먼저 이클립스 접속 http://www.eclipse.org/

2. 오늘쪽 상단 검색창에 window builder 검색!!!(사실 구글에서 검색해도 됨)


3. 사실 구글검색이다. 결과 첫번째것 클릭!!

 

4.https://www.eclipse.org/windowbuilder/ 이 사이트에서 Download 를 들어간다.
(다운로드 링크 주소 : https://www.eclipse.org/windowbuilder/download.php)


5. 위 사진의 중앙부분에 Update Sites의 link 부분에서 자기의 이클립스 버전에 맞는 link를 찾아 왼쪽 클릭이 아니라 오른쪽 클릭!!!(다운받는거 아님니다.) 그리고 속성!!!

(참고로 크롬에서는 속성이 없으니 왠만하면 익스플로어에서 접속하자)

 

6. 속성 창이 뜨면 주소(URL)을 드레그하고 ctrl + c 한다.

7. 그리고 이클립스를 실행하고 help - Install - New Software... 를 열면

8. 이런게 나온다.. 여기서 오른쪽에 Add...
 
9. 그럼 Add Repository가 나오는데 Name에 window builder(이름이야 뭐 아무렇게나..) 그리고 Location에 아까 ctrl + c 했던것을 붙여넣어 준다. 그리고 OK!!

 

10. 그럼 자동으로 설치할 파일을 웹이서 찾아주고 Name에 나타나 진다.

11. Select all 클릭 후 Next > 

 

12. 자동으로 다운로드 된다.(싱기방기...)

13. Install할 목록들이 Details하게 나온다..(Swing...SWT...)

Next > 

 

14. Licenses를 Review해라...(영어는 날 힘들게해...어차피 우리는 accept의 노예...I accept... 클릭)

Finish

 

15. 그럼 설치가 된다...


16. 껏다 키란다..Yes

17. 설치 끝.. 실행해 보자 New - other - WindowBuilder - JFram - Next> 하고 JFram을 만들어 보자

 

18. 아래쪽 Design을 클릭해 요런 화면이 나오면 성공!

 

이렇게 설정이 끝나면 Eclipse 툴로 java 디자인을 작업할수 있다.



출처 - http://blog.naver.com/ourbebop/30186910685



저작자 표시
신고


Posted by injunech
2017.03.07 04:59


Android Studio 에서 Android Version N 이상의 모바일단말을 구동시에 아래와 같은 에러가 발생하는경우 JDK 의 버전을 최신으로 업데이트 해주어야 한다.


Error:(1, 1) A problem occurred evaluating project ':app'.

java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0


# 문제해결 방법

Download latest java jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

In Android Studio , go to File > Project Structure > SDK Location > select JDK Location path to point to the new jdk installed (Ex: C:\Program Files\Java\jdk1.8.0_111 )


저작자 표시
신고


Posted by injunech