C++ 회귀를 이용하여서 조합(Combination) 구현.

 

 

[코 드]


#include <string>
#include <vector>
#include <iostream>

using namespace std;

vector<vector<int>> result;
vector<int> v = { 1,2,3,4,5 };
int len = v.size();
vector<int> sub;

void ser(int k) {

    if (k == len  ) {
        result.push_back(sub);
    }
    else {
        sub.push_back(v[k]);
        ser( k + 1);
        sub.pop_back();
        ser( k + 1);
    }
}

int main()
{
    ser(0);

    for (int i = 0; i < result.size(); i++) {
        for (int k = 0; k < result[i].size(); k++) {
            cout << result[i][k];
        }
        cout << "\n";
    }

    return 0;
}



8라인 > 결과를 저장할 2차원 vector

9라인 > vector<int> v : 조합을 실행할 값의 집합

10라인 > int len : 조합을 실행할 값의 개수

 

 

 

 

 

 

[ 결 과 ]

 

 

 

 

 

 

 

C++ 회귀를 이용한 순열(permutation) 구현.

 

 

 

 

[ 코 드 ]


#include <iostream>
#include <string>
#include <vector>

using namespace std;

vector<vector<int>> result;
vector<int> v = { 1,2,3,4 };
int len = v.size();
bool choose[4];
vector<int> temp;

void ser( int k) {
	if (k == len) {
		result.push_back(temp);
	}
	else {
		for (int i = 0; i < len; i++) {
			if (choose[i]) continue;
			choose[i] = true;
			temp.push_back(v[i]);
			ser(k + 1);
			temp.pop_back();
			choose[i] = false;
		}
	}
}

int main() {

	ser(0);
	for (int i = 0; i < result.size(); i++) {
		for (int k = 0; k < result[i].size(); k++) {
			cout << result[i][k] << " ";
		}
		cout << "\n";
	}

}

7라인 > 결과 값들을 저장할 2차원 vector

8라인 > vector<int> v : 순열을 실행할 값들

9라인 > int len : 값들의 개수

10라인 > len만큼의 크기를 갖는 bool 배열

 

 

 

 

 

[ 결 과 ]

 

 

 

adb를 이용한 스마트폰 원격 연결 방법

 

 

 

1.  [Window + r] -> cmd 실행 -> adb 엔터

이렇게 입력을 하면 없는 명령어라고 나온다.

 

 

 

2. 우선 안드로이드 스튜디오를 설치할 때 같이 설치된 adb를 찾아야 한다.

보통은 C:\Users\사용자명\AppData\Local\Android\Sdk\platform-tools 해당 위치에 있다.

 

AppData는 숨김 파일이라는 점을 주의해야 한다.

 

 

 

3. adb.exe 파일을 찾았다면 이 위치를 환경 변수의 저장해 준다.

 

제어판\시스템 및 보안\시스템 -> 고급 시스템 설정 -> 고급 탭 -> 환경 변수 ->

변수 목록의 Path 선택 -> 편집 클릭 -> 위 2번의 경로를 추가해 준다.

 

 

 

4. 다시 cmd를 실행하고 adb를 입력하면 1번과 달리 adb(Android Debug Bridge)가 실행된다.

 

 

 

5. 이제 연결할 스마트폰을 USB로 연결해 준다.

 

 

 

6. 아래 문을 입력해 준다.

 

> adb tcpip [포트번호]

 

포트 번호는 본인이 마음대로 지정해주는 것이며, 이미 사용중인 다른 포트와 겹치면 안된다. 모르겠다면 5000~9999 사이의 적당한 값을 입력해준다.

위처럼 뜬다면 성공한 것이다.

 

해당과정은 포트를 지정해주는 것이므로 이후 재연결 시 다시 시도할 필요가 없다.

 

 

 

 

 

7. 포트 지정까지 끝났다면 이제 

> adb connect [스마트폰의 연결된 와이파이 ip주소]:[위에서 지정한 포트번호]

 

※ 스마트폰의 연결된 Wifi를 클릭해보면 해당 Wifi의 IP주소를 알 수 있다.

※ 원격 연결을 하기 위해서는 스마트폰과 해당 컴퓨터가 같은 네트워크의 연결되어있어야 한다.

 

성공하였으면 원격 연결이 되었다. 

 

이제 USB를 제거하고 안드로이드 스튜디오에서 원격으로 애플리케이션을 다운받아서 테스트 해볼 수 있다.

 

 

 

 

8. 연결을 해제 해 줄 때는

 

> adb disconnect

 

입력해 준다.

 

 

 

 

 

+) 연결해 줄 때마다 위 과정을 일일이 처리하기는 귀찮다.

 

그래서 해당 과정을 .bat파일로 만들면 간단히 해당 구문을 실행할 수 있다.

 

 

메모장 -> 7번에서 입력하였던 adb connect [스마트폰의 연결된 와이파이 ip주소]:[위에서 지정한 포트번호] 입력 후 저장 -> 파일 형식은 모든 파일을 선택한 후 파일명의 .bat을 붙인다.

 

-> 마찬가지로 연결을 해제해주는 8번도 .bat파일로 만들어 주면 파일을 실행함으로써 간단하게 연결해주고 해제해 줄 수 있다.

 

 

 

 

 

 

안드로이드 회전 고정/설정     

 

 

액티비티는 회전 시 재시작하므로 데이터를 복원해주는 코드를 구현 해야한다.

 

하지만 이를 구현하지 않기 위해서는 화면을 고정되도록 하면 된다.

 

또한 레이아웃 상 화면 방향을 고정하고자 할 때 화면을 고정하면 된다.

 

 

 

 

 

예시)매니페스트 파일

 

[매니페스트 파일] -> [ 해당 activity 속성 ] ->

 

가로 고정

android:screenOrientation="landscape"

 

 

세로 고정

android:screenOrientation="portrait"

 

을 추가해주어야 한다.

 

 

※ 단, 액티비티의 속성이므로 액티비티마다 설정을 해주어야 한다. 위 이미지를 보면 MainActivity는 가로로 고정 되었지만 Main2Activity는 설정을 해주지 않아 화면이 회전 되는 것을 볼 수 있다.

 

이는 특정 액티비티에서만 화면 방향을 고정 할 수 있게 한다는 장점이 있지만, 액티비티마다 속성을주어야 한다는 단점이 있다.

 

 

안드로이드 다중 창 설정하기     

 

 

다중 창(multi windows) 기능이란 안드로이드 7.0 누가부터 추가 된 기능이다. 

 

기본값으로 사용이 가능하도록 되어있으므로 애플리케이션의 설정을 건드리지 않는다면 다중 창을 지원한다.

 

하지만 다중 창을 사용할 때는 액티비티가 재시작되므로 화면 회전같은 경우와 마찬가지로 데이터를 유지시키도록 처리해야한다.

 

화면 회전과 마찬가지로 데이터 처리부분을 구현 안 할것이면 다중 창 모드를 지원하지 않도록 하면 된다.

 

 

 

 

예시)매니페스트 파일

 

[매니페스트 파일] -> [ application 속성] ->

android:resizeableActivity = "false"

를 추가 해 준다.

 

 

기본 값은 true로써 다중 창 모드를 지원하도록 되어있다.

 

 

스택 

데이터를 저장하기 위해 사용하는 자료구조 중 하나이다.

데이터의 입출력 순서는 후입선출[=선입후출](Last In First Out, 나중에 입력 된 것이 가장 먼저 출력된다.) 이다.

 

 


package mycode

public class MyStack {

	int size;
	int point;
	E[] stac;	// 제네릭 클래스로 스택 생성

	public MyStack(int size) {
	point = 0;
	this.size = size;
	try {
		stac= new E[max]	// 
	}

	}


	public void push(E x) {
		if( point >= size)
			System.out.println("스택이 가득 찼습니다.");
		else
			stac[point++] = x;

	}

	public void pop() {
		if( point <= 0)
			System.out.println("스택이 비어있습니다.");
		else 
			stac[point--];
	}


	public E indexOf(E x) {
		for(int i = point -1; i>=0; i--) {
			if( stac[i] == x)
				return i;
		}
		return -1;
	}

	public void stack_view() {
		if( point <= 0)
			System.out.println("스택이 비어있습니다.");
		else {
			for(int i=0; i< point; i++)
				System.out.print(stac[i] + " ");
			System.out.println();
		}

	}

	public static void main(String[] args) {
		MyStack s;
		
		s.push(40);
		s.push(8);
		s.push(12);
		s.push(7);
		s.pop();
		s.push(27);

		System.out.println("스택에서 12 인덱스(-1이면 없음) : "+indexOf(12));

		s.stack_view();
	}
}

 

- 스택의 데이터를 넣기 위해서 push(E x)를 사용한다.

- 스택에서 데이터를 빼기 위해서 pop()을 사용한다.

- 스택에서 해당하는 데이터의 있는 인덱스를 알기 위하여 indexOf(E x)를 사용한다.

- 스택의 어떤 데이터가 들어가 있는지 보기 위하여 스택의 데이터들을 출력하기 위해 stack_view()를 사용한다.

 

- 제네릭 클래스로 생성하였으므로 클래스 변수를 생성할 시 스택의 자료형을 지정할 수 있다. 

 

'JAVA > 기초' 카테고리의 다른 글

Java static 정적 변수, 메소드  (0) 2020.03.17
Java 배열 기본값, 배열 복사  (0) 2020.03.16
Java 향상된 for문, label  (0) 2020.03.16
Java 형변환  (0) 2020.03.15
Java 데이터 타입  (0) 2020.03.15

안드로이드 액션바에 뒤로 가기 버튼 추가하기

 

 

 

실행 화면

 

 

 

 

 

 

 

 

 

 

 

 

▲ 1. AndroidManifest.xml 파일을 연다.

 

 

 

 

 

▲ 2. 뒤로가기 버튼을 추가할 activity에서 android:parentActivityName 속성을 추가한다.

 

속성 값으로는 뒤로 가기 버튼을 눌러서 이동될 activity의 name을 주면 된다.

 

 

ex)

<activity                                 <- 뒤로 가기 버튼을 추가할 액티비티

   android:name=                     <- 해당 액티비티의 이름

   android:parentActivityName     <- 뒤로 가기 버튼으로 이동할 엑티비티 이름

/>

 

 

 

 

 

2019/05/15 - [Android] - 안드로이드 메뉴 만들기

 

안드로이드 메뉴 만들기

안드로이드 액션바에 메뉴 아이템 추가하기 실행 화면 ▲ 1. res - [New] -> [Android Resource Directory] 클릭 ▲ 2. Resource type에서 menu 선택 후 OK 버튼 클릭 ▲ 3. 생성 된 menu 디렉터리에서 [New]..

godog.tistory.com

 

▲ 메뉴를 추가하고 해당 속성을 사용하여도 둘 다 적용되므로 메뉴에 뒤로가기 버튼을 구현하고 싶을 경우 간단히 한 줄로 구현할 수 있다.

 

안드로이드 액션바에 메뉴 아이템 추가하기

 

 

 

실행 화면

 

 

 

 

 

 

 

 

 

 

 

▲ 1. res - [New] -> [Android Resource Directory] 클릭

 

 

 

 

▲ 2. Resource type에서 menu 선택 후 OK 버튼 클릭

 

 

 

 

▲ 3. 생성 된 menu 디렉터리에서 [New] -> [Menu resource file] 클릭

 

 

 

 

 

▲ 4. 레이아웃을 만들 때처럼 Palette에서 item을 끌어다가 간단히 추가

 

 

 

 

▲ 5. 

id : 자바 코드에서 각 아이템을 클릭하였을 때 동작을 지정하기 위해서 필요

- title : 아이콘이 아닌 목록으로 표시할 때 보일 메뉴 명

- icon : 표시할 아이콘 이미지

- showAsAction : always를 클릭하면 항상 아이콘이 보인다. (아이콘이 없을 경우 title로 표시)

 

 

 

icon 이미지 파일을 직접 만들경우 이미지 리소스의 크기는 아래 글을 참조하면 될 것 같다.

2019/05/15 - [Android] - 안드로이드 이미지 리소스 크기

 

 

 

▲ 6. 

showAsAction

- never : 메뉴를 [ ... ] 안으로 감춤

- ifRoom : 공간이 남을 경우 [ ... ] 밖으로 표시

- always : 항상 [ ... ] 밖으로 표시

 

 

 

 

 

▲ 7.

- 이제 메뉴를 보여줄 엑티비티의 .java 파일로 간다.

 

- 클래스 안의 커서를 두고 Ctrl + O 를 누른다.

 

- onCreateOptionsMenu 를 찾아서 추가

 

 

 

 

 

▲ 8.  7번 과정 처럼 onOptionsItemSelected 도 추가

 

 

 

 

 

 

▲ 9. 

- onCreateOptionsMenu 메소드에서는 .inflate를 사용하여서 연결하고자하는 menu 리소스 파일과 연결해 준다.

 

- onOptionsItemSelected 메소드에서는 item의 지정하였던 id를 이용하여서 각각의 메뉴가 선택되었을 때 동작할 코드를 구현하면 된다.

 

 

 

 

 

▲ 10. 실행 후 메뉴 아이템을 선택하면 Toast 메시지를 확인할 수 있다.

+ Recent posts