본문 바로가기

자바

반복되지 않는 첫 번째 문자찾기 문자열에서 처음으로 반복되지 않는 문자를 찾아내는 알고리즘을 포스팅 해보고자 합니다. "akanea" 에서 반복되지 않는 문자는 무엇일까요? k, n, e 입니다. 여기서, 처음으로 반복되지 않은 문자는 k 입니다. 우선, 알고리즘을 구현하기 위해 생각해 볼 사항이 있습니다. '어떻게 문자를 찾을까?' 여기서 우리가 생각해보면 아주 간단합니다. '해당 문자마다 중복되면 하나씩 카운팅해서 가장 첫번째 있는 문자 카운팅이 1 인 경우' 즉, akanea 가 있을때 각 문자별로 카운팅을 한다고 가정해봅시다. a 는 3, k 는 1, n 은 1, e 는 1 여기서 첫번째 중복되지 않는 문자 k 는 카운팅이 1이므로 정답은 k 가 됩니다. 이 알고리즘을 실제 적용해보도록 하겠습니다. 우선, 어떤 문자가 반복되는지.. 더보기
자바로 문자열 정수를 int 형 정수로 변경하는 알고리즘 이번 포스팅에서는 String 형 정수를 int 형 정수로 변경하는 방법을 배워보겠습니다. C언어서는 atoi 라는 함수를 통해 char[] 문자열을 정수로 바꿀 수 있고, 자바는 Integer 클래스에 parseInt 메서드를 통해 String 을 int 로 바꿀 수 있었습니다. 자 그럼 직접 parseInt 를 구현해보도록 하겠습니다. 우선 parseInt 를 직접 구현하기 앞서 아스키코드 와 String 이 어떻게 데이터를 내부적으로 저장하는지에 대해 선행 지식이 필요합니다. (이미 포스팅을 해두었으니 참고 바랍니다.) ※ 참고 : http://globalbiz.tistory.com/81 (String 클래스 깊숙히 이해하기) ex) String str = "12"; str 객체 에 담긴 12 문자.. 더보기
String 클래스 깊숙히 이해하기 이번 강좌에서는 String 클래스를 좀더 깊숙히 알아보는 시간을 갖고자 합니다. 우선 String = "12"; 즉, 스트링 객체에 12 라는 문자열이 들어 있습니다. 위 String 객체에 담긴 12 라는 문자열은 내부적으로 어떻게 처리되어 저장될까요? 일단 좀더 깊숙히 들어가 봅시다. 첫번째, String 객체의 내부 비밀 String 객체는 final 한 클래스로서 상속(확장) 이 불가능 합니다. 또한, String 객체는 내부적으로 char 배열에 데이터를 저장하여 보관하고 있습니다. String 클래스 String 생성자 실제 String str = new String("ABC") 한개의 String 객체를 생성할때 생성자 내부적으로 String 객체를 char 배열로 변환해서 저장합니다. (.. 더보기
자바로 구현하는 큐 (Queue) 큐(Queue) ? 큐(queue)는 자료 구조의 한가지로, 먼저 집어 넣은 데이터가 먼저 나오는 FIFO (First In First Out)구조로 저장하는 형식을 말한다. 영어 단어 queue는 표를 사러 일렬로 늘어선 사람들로 이루어진 줄을 말하기도 하며, 먼저 줄을 선 사람이 먼저 나갈 수 있는 상황을 연상하면 된다. 나중에 집어 넣은 데이터가 먼저 나오는 스택과는 반대되는 개념이다. 프린터의 출력 처리나 윈도 시스템의 메시지 처리기, 프로세스 관리 등 데이터가 입력된 시간 순서대로 처리해야 할 필요가 있는 상황에 이용된다. Queue 의 과정 큐의 데이터 삽입, 추출 과정 큐에서 front 는 가장 먼저 큐에 들어온 첫번째 원소 이고, rear 는 큐에 가장 늦게 들어온 마지막 원소가 된다. 공.. 더보기
자바로 구현하는 퀵정렬 (Quick Sort) 알고리즘 퀵 정렬(QuickSort) 이란? 분할 작업을 순환적으로 반복하면서 피봇의 왼쪽 왼쪽 부분 집합과 오른쪽 부분집합을 정렬 하는 방법 1. 전체원소 가운데 하나의 원소를 중심(Pivot)으로 2개의 부분 집합으로 분할 한다. 2. 기준값(Pivot) 보다 작은 원소는 왼쪽 부분집합으로, 기준값(Pivot) 보다 큰 원소들은 오른쪽 부분 집합으로 정렬한다. 3. 분할된 부분집합의 크기가 0이나 1이 될 때 까지 순환 호출을 이용하여 다시 분할 한다. 위 과정을 반복하는 것이 퀵정렬 입니다. 출처 - http://ko.wikipedia.org/wiki/%ED%80%B5_%EC%A0%95%EB%A0%AC C로 배우는 쉬운 자료구조 (한빛미디어) 서적의 수도코드 (pseudo code) 를 참고 하였으며, 서적.. 더보기
자바로 구현하는 선택정렬 (Selection Sort) 알고리즘 선택정렬이란? 제자리 정렬 알고리즘의 하나로, 전체 원소들 중에서 기준 위치에 맞는 원소를 선택하여 자리를 교환하는 방식 1. 주어진 원소중 최소값을 찾는다. 2. 그 값을 첫 번째 원소와 교환 한다. 3. 그 다음 작은 원소를 찾아 다음 위치의 원소와 비교하여 교환한다. 위 과정을 반복하는 것이 선택정렬 입니다. 출처 - http://ko.wikipedia.org/wiki/%EC%84%A0%ED%83%9D_%EC%A0%95%EB%A0%AC 수도코드 예를들어, {80, 6, 2, 3, 1} 원소를 정렬하고자 하는 경우, (기준위치 를 빨간색, 최소값 위치 파란색으로 표시) 1단계 80 6 2 3 1 정렬후 : 1 6 2 3 80 2단계 1 6 2 3 80 정렬후 : 1 2 6 3 80 3단계 1 2 6 .. 더보기
자바로 구현하는 버블소트 (Bubble sort) 알고리즘 거품 정렬(Bubble sort)이란 ? - 두 인접한 원소를 검사하여 정렬하는 방법 시간 복합도가 로 상당히 느리지만, 코드가 단순하기 때문에 자주 사용된다. 원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어진 이름이다. 출처: http://ko.wikipedia.org/wiki/%EA%B1%B0%ED%92%88_%EC%A0%95%EB%A0%AC 여기서 잠깐! 자바에선 편리하게도 배열, 리스트 형태의 데이터를 정렬해주는 클래스가 존재한다. Arrays 클래스의 Sort 메서드를 통해 byte, int, short 배열 등 각 타입배열에 따른 정렬을 제공해주고, Collections 클래스의 sort, reverse 메서드를 통해 List 타입의 자료를 정렬해준다. 두 방식 모두 순.. 더보기
Android 기본 프로젝트 MainActivity.java 분석 package com.example.sample; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBarActivity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; pub.. 더보기
Android ADT 22.6.0 이상 이전의 BlankActivity 환경 만들기 안드로이드 기본 프로젝트를 생성 할줄 알고 있다는 가정하에 진행 하겠습니다. 초기 프로젝트 생성시 아래와 같은 환경으로 프로젝트를 생성할 것 입니다. 여기 까지 완성 됬다면, appcompat_v7 프로젝트와 Sample 프로젝트 총 2개가 생성 되었을 겁니다. ※ 프로젝트 마우스 오른쪽 눌러서 Properties 속성에서 appcompat_v7 라이브러리가 정상적으로 위와 같이 참조 되었는지 확인해주세요! (1) MainActivity.java 소스코드 를 아래와 같이 변경 package com.example.sample; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { @.. 더보기
Android ADT 22.6.0 이후의 변화 안드로이드 Developer 사이트에서 ADT와 이클립스를 묶어 배포했던 버전(20131030 기준) ADT 22.3 버전이 20140321 기준으로 ADT 22.6.2 버전으로 업데이트 되었습니다. 2014년 3월 한달간 총 3차례의 업데이트가 이루어졌습니다. 22.6.0 -> 22.6.1 -> 22.6.2 (현재) 가장 큰 변화 몇가지를 살펴 보고자 합니다. 1. JDK 7 언어 기능에 대한 지원 - JDK7 컴파일 환경을 지원 하고 JDK7 의 문법 지원 (multi-catch, try-with-resources, diamond operator 등) (19 이상 Bulid Tools 필요) 단, Try-with-resources 는 minSdkVersion 19 이상 에서만 지원 한다고 합니다. J.. 더보기