반응형

1.String 클래스

-대소문자 변환

  • toUpperCase 메소드 : 모든 글자를 대문자로
  • toLowerCase 메소드 : 모두 소문자로 변환
  • myString 자체를 바꾸는 것이 아니라 새로운 문자열로 리턴시켜주는 것 
String myString = "aBc";
System.out.println(myString.toUpperCase()) // 모두 대문자로
System.out.println(myString.toLowerCase()) // 모두 소문자로
System.out.println(myString)               // 그대로

ABC
abc
aBc

 

-문자열 비교

->참조형 비교 연산자(==)는 가리키는 인스턴스가 같은 인스턴스인지 확인하는 역할

 

두 문자열의 내용이 같은지 비교하려면 equals 메소드를 사용

String myString = "aBc";
System.out.println(myString.toLowerCase().equals("abc"));

true

 

2.숫자 도구

-Math 클래스

   -절대값

import java.lang.Math;

public class Driver {
    public static void main(String[] args) {
        System.out.println(Math.abs(-10));
        System.out.println(Math.abs(8));
    }
}

10
8

  -최소값, 최대값

import java.lang.Math;

public class Driver {
    public static void main(String[] args) {
        System.out.println(Math.min(4, 10));  // 최솟값
        System.out.println(Math.max(4, 10));  // 최댓값
    }
}

4
10

 

-Random 클래스

-> 인스턴스를 생성해서 사용해야함

import java.util.Random;

public class Driver {
    public static void main(String[] args) {
        Random rand = new Random();
        System.out.println(rand.nextInt(10));   // 0 이상 9 이하의 랜덤한 값
    }
}

 

-a ~ b 사이의 랜덤 값

import java.util.Random;

public class Driver {
    public static void main(String[] args) {
        Random rand = new Random();
        int min = 10;
        int max = 30;

        System.out.println(rand.nextInt((max - min) + 1) + min);   // 10 이상 30 이하의 랜덤한 값
    }
}

 

3.Wrapper Class

-> 기본 자료형을 객체 형식으로 감싸는 역할

->Integer 클래스는 int형을, Double 클래스는 double을, Long 클래스는 long을, Boolean 클래스는 boolean을 감쌈

-> ArrayList 같은 컬렉션을 사용할 때 꼭 참조형을 사용해야 함

-> 인스턴스는 생성자로 생성할 수도 있고, 리터럴로 생성할 수도 있음

Integer i = new Integer(123);
Integer i = 123;

 

-주의할 점

System.out.println(123 == 123);
System.out.println(new Integer(123) == new Integer(123));

true
false //참조형의 비교 연산자는 가리키는 객체가 같읕지 비교하기 때문입니다. 두 생성자를 통해 만든 다른 객체이기 때문에 

 

 

두 String 인스턴스를 비교할 때 처럼 equals 메소드를 쓰면 '값'이 같은지 확인

System.out.println(new Integer(123).equals(new Integer(123)));

true

 

4.ArrayList

import java.util.*
import java.util.ArrayList
  • 객체들을 삽입, 삭제, 검색 할 수 있는 컨테이너 클래스
  • 배열의 길이 제한 단점을 극복할 수 있다
  • 삽입되는 객체의 수가 많아지면 자동으로 크기가 조절된다
  • 아이템을 벡터의 맨 마지막이나 중간에 삽입할 수 있다
  • ArrayList 맨 뒤에 객체 추가 : 벡터 공간이 모자라면 자동 늘림
  • ArrayList 중간에 객체 삽입 : 뒤에 존재하던 객체는 한칸씩 뒤로 이동
  • 임의의 위치에 있는 개체 삭제 : 객체 삭제 후 한칸씩 앞으로 자동 이동

선언 방식

ArrayList<test> myList = new ArrayList<test>(); //선언방식

<> 안에 들어가는 것 : List 타입

 

<주요 메소드>

myList.add(Object elem)
     객체 매개변수(elem)를 목록에 추가

myList.remove(int index)
     index 매개변수로 지정한 위치에 있는 객체를 제거

myList.remove(Object elem)
     주어진 객체가 List에 있으면 그 객체를 제거

myList.contains(Object elem)
     객체 매개변수 elem에 매치되는 것이 있으면 '참'을 리턴

myList.isEmpty()
     목록에 아무 원소도 없으면 '참'을 리턴

myList.indexOf(Object elem)
     객체 매개변수(elem)의 인덱스 또는 -1을 리턴

myList.size()
      현재 목록에 들어있는 원소의 개수를 리턴

get(int index)
      주어진 index 매개변수 위치에 있는 객체를 리턴

 

5.HashMap

->  'value(원소)'와, 그 원소를 가리키는 'key' 값을 같이 저장

 

-사용

   ->HashMap의 키로는 String을 쓰는 것이 가장 일반적

 

-선언하기

HashMap<String, Pokemon> pokedex = new HashMap<>();

-key-Value 쌍 추가하기(put 메소드)

pokedex.put("피카츄", new Pokemon("피카츄"));
pokedex.put("파이리", new Pokemon("파이리"));
pokedex.put("이상해씨", new Pokemon("이상해씨"));
pokedex.put("이상해풀", new Pokemon("이상해풀"));
pokedex.put("이상해꽃", new Pokemon("이상해꽃"));

 

-값 꺼내기(get 메소드)

Pokemon pikachu = pokedex.get("피카츄");

-원소 덮어쓰기

pokedex.put("피카츄", new Pokemon("라이츄");

 

 

-반복문을 통해 HashMap 탐색하기

  • HashMap의 keyset메소드는 모든 key를 담고 있는 Set을 리턴
  • Set은 List나 Map과 같이 원소를 담고 있는 자료형 중 하나이며 'for each'문으로 탐색이 가능
for (String key : pokedex.keySet()) {
    System.out.println(pokedex.get(key));
}

 

(심화) 동작원리

HashMap의 key는 'hashcode'라는 것으로 관리

hashcode는 모든 클래스의 인스턴스가 가진 고유한 값인데, 인스턴스마다 다르기 때문에 HashMap이 key를 구분하는 값으로 사용

(여러 인스턴스가 같은 hashcode를 가질 수 있으며, 이 경우 HashMap에선 key.equals(anotherKey) 메소드로 구분).

일반적인 클래스는 인스턴스 생성시 hashcode 값이 결정

즉, 같은 정보를 담고 있는 두 인스턴스가 서로 다른 hashcode를 가질 수 있다

 

그런데 String은 서로 다른 인스턴스라도 안의 내용이 같으면 같은 hashcode를 가짐.

그렇기 때문에 HashMap의 key로서 String이 매우 적합.

Key는 실제 인스턴스보다는 안에 담긴 의미, 내용으로 구분하는 것이 좋기 때문!!

반응형

'Language Study > Java' 카테고리의 다른 글

5. 자바, 더 정확하게  (0) 2019.09.08
제주에서 자바_Week4  (0) 2019.08.12
제주에서 자바_Week3_4  (0) 2019.08.11
##자바 헷갈리는 이론  (0) 2019.08.01
제주에서 자바_Week3_3  (0) 2019.07.31
반응형

1. 기본형 vs 참조형

 

-기본형 : int / boolean / char / double 

int a = 3;
int b = a;

System.out.println(a);  // 3 출력
System.out.println(b);  // 3 출력

a = 4;
System.out.println(a);  // 4 출력
System.out.println(b);  // 3 출력

b = 7;
System.out.println(a);  // 4 출력
System.out.println(b);  // 7 출력

 

-참조형 : Person, String , int[] 등 클래스 기반 자료형

Person p1, p2;
p1 = new Person("김신의", 28);

p2 = p1;
p2.setName("문종모");

System.out.println(p1.getName()); //문종모
System.out.println(p2.getName()); //문종모

p1은 '김신의'라는 이름을 가진 Person 인스턴스가 저장되어있음

p2 = p1 => p2에게 같은 영역을 가리키라

p2.setName("문종모") 를 하면 그 영역에 있는 인스턴스의 name -> 문종모  로 바뀜

p2, p1은 모두 같은 영역을 가리키고 있으니 두 출력 값은 모두 '문종모'

 

배열 또한 객체이기에 참조형

int[] a = new int[3];
int[] b = a;

a[0] = 1;
b[0] = 2;

System.out.println(a[0]); //2
System.out.println(b[0]); //2

 

 

2. null 

비어있음 -> null 로 표현

단, null은 참조형 변수(Reference Type)만 가질 수 있는 값

Person p1 = null;
System.out.println(p1); //null

//만약, null을 보관하고 있는 변수의 메소드를 호출하려고 하면 오류 발생
Person p1 = null;
p1.getName(); //Exception in thread "main" java.lang.NullPointerException

//대처법
Person[] people = new Person[5];
people[0] = new Person("김신의", 28);
people[2] = new Person("문종모", 26);
people[3] = new Person("서혜린", 21);

for (int i = 0; i < people.length; i++) {
    Person p = people[i];
    if (p != null) {
        System.out.println(p.getName());
    } else {
        System.out.println(i + "번 자리는 비었습니다.");
    }
}

/*김신의
1번 자리는 비었습니다.
문종모
서혜린
4번 자리는 비었습니다.*/

 

3. 숏서킷 연산(Short-Circuit Evaluation)

-> 실의 결과값이 이미 결정된 경우 미리 멈추는 것

 

-And (&&)

boolean newBoolean = m1() && m2() && m3();

-> newBoolean이 true가 되기 위해서는  m1()m2()m3()가 모두 true를 리턴해야함

 

-Or (||)

boolean newBoolean = m1() || m2() || m3();

-> newBoolean이 false이기 위해서는 m1()m2()m3()의 리턴값이 모두 false이어야 함

 

4. 변수 안전하게 만들기(final)

-변수 정의 시 final을 써주면, 그 변수는 상수가 됨 -> 한번 정의하면 다시 바꿀 수 없음

 

-참조형

public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public static void main(String[] args) {
        final Person p1 = new Person("김신의");
        p1.setName("문종모");
        System.out.println(p1.getName());
    }
}
//문종모

->p1의 이름을 못 바꾸도록 만들고 싶으면 Person 클래스 내에서 name을 final로 정의해주면 됨.

 

5. 인스턴스 변수 vs 클래스 변수

 

-인스턴스 변수

public class Person {
    int count;
}

//새로운 Person 인스턴스를 생성할 때마다 각 인스턴스의 count변수를 계속 바꿔야함
public static void main(String[] args) {
    Person p1 = new Person();
    p1.count++;

    Person p2 = new Person();
    p1.count++;
    p2.count = p1.count;

    Person p3 = new Person();
    p1.count++;
    p2.count++;
    p3.count = p2.count;

    Person p4 = new Person();
    p1.count++;
    p2.count++;
    p3.count++;
    p4.count = p3.count;

    System.out.println(p1.count); //4
    System.out.println(p2.count); //4
    System.out.println(p3.count); //4
    System.out.println(p4.count); //4
}

 

-클래스 변수 버전

public class Person {
    static int count;
}

//count는 특정 인스턴스에 해당되는게 아니라, Person 클래스 전체에 해당되는 것
//count 부를 때 대문자로 쓴 클래스 이름을 사용해서 Person.count 써준다

public static void main(String[] args) {
    Person p1 = new Person();
    Person.count++;

    Person p2 = new Person();
    Person.count++;

    Person p3 = new Person();
    Person.count++;

    Person p4 = new Person();
    Person.count++;

    System.out.println(Person.count);
} //4

 

-> Person.count++ 매번해주는 것을 개선시켜주자 

public class Person {
    static int count;

    public Person() {
        count++;
    }
}

public static void main(String[] args) {
    Person p1 = new Person();
    Person p2 = new Person();
    Person p3 = new Person();
    Person p4 = new Person();

    System.out.println(Person.count);
}//4

 

-> 변수가 클래스 자체에 해당될 때는 static 써서 클래스 변수로 만들어주자!

 

-상수

상수는 인스턴스에 해당되는 것이 아니며, 여러 복사본 대신 한 값만 저장해둔다

public class CodeitConstants {
    public static final double PI = 3.141592653589793;
    public static final double EULERS_NUMBER = 2.718281828459045;
    public static final String THIS_IS_HOW_TO_NAME_CONSTANT_VARIABLE = "Hello";

    public static void main(String[] args) {
        System.out.println(CodeitConstants.PI + CodeitConstants.EULERS_NUMBER);
    }
}//5.859874482048838

 

6.인스턴스 메소드 vs 클래스 메소드 

-클래스 메소드 : 인스턴스가 아닌 클래스에 속한 메소드

-> 인스턴스를 생성하지 않고도 바로 실행할 수 있다

 

<클래스 메소드 예시>

-Math 클래스 

import java.lang.Math;

public class Driver {
    public static void main(String[] args) {
        System.out.println(Math.abs(-10));   // 절댓값
        System.out.println(Math.max(3, 7));  // 두 값 중 최댓값
        System.out.println(Math.random());   // 0.0과 1.0 사이의 랜덤값
    }
}

10
7
0.40910432549890663

Math 클래스에 있는 abs()max()random() 등의 메소드가 바로 '클래스 메소드'

 

-main 메소드

public static void main(String[] args) {
    ...
}

 

-클래스 변수를 다룰 때

public class Counter {
    static int count;

    public static void increment() {
        count++;
    }

    public static void main(String[] args) {
        System.out.println(Counter.count);

        Counter.increment();
        System.out.println(Counter.count);

        Counter.increment();
        System.out.println(Counter.count);

        Counter.increment();
        System.out.println(Counter.count);
    }
}
0
1
2
3

 

언제 클래스 메소드를 쓰나?

-> 생성된 인스턴스가 하나도 없더라도 메소드를 호출하고 싶다면 -> static메소드 사용

반응형

'Language Study > Java' 카테고리의 다른 글

6. 자바, 더 간편하게  (0) 2019.09.08
제주에서 자바_Week4  (0) 2019.08.12
제주에서 자바_Week3_4  (0) 2019.08.11
##자바 헷갈리는 이론  (0) 2019.08.01
제주에서 자바_Week3_3  (0) 2019.07.31
반응형

도전! 임베디드 OS만들기(부제 : 코딩하며 배우는 운영체제 원리)

저자 : 이만우 (숭실대 컴퓨터학부 졸업, SSM, 삼성전자 반도체 총괄중.)

 

이 책을 보고 따라하며 내용을 정리합니다

교수님 환경을 따라하고, 하다가 조금 더 나은 환경으로 구축하겠습니다

 

https://blog.naver.com/goodkus/220199301787

이 블로그를 참조하여 진행합니다. 문제가 된다면 삭제하겠습니다 ^0^

 

 

운영체제란?

 - 응용 프로그램과 하드웨어 사이에서 인터페이스 역할을 하며 시스템의 동작을 제어하는 시스템 소프트웨어. -> 시스템의 자원과 동작을 관리하는 소프트웨어.

 

운영체제의 역할

- 프로세스 관리

- 스레드, 프로세스

- 스케줄링

- 동기화

- IPC

- 저장장치 관리

- 메모리 관리

- 가상 메모리

- 파일 시스템

- 네트워킹

- TCP / IP

- 기타 여러 프로토콜

- 사용자 관리

- 계정 관리

- 접근권한 관리

- 디바이스 드라이버

- 순차접근 장치

- 임의접근 장치

- 네트워크 장치

 

프로세스 관리 

  운영체제에서 작동하는 응용 프로그램을 관리하는 기능. 현재 프로세서를 점유해야 할 프로세스를 결정하고, 프로세서(CPU)를 프로세스에 할당하며, 프로세스 간 공유 자원 접근과 통신 등을 관리.

 

저장장치 관리 

  시스템의 메인 메모리와 하드디스크등을 관리하는 기능.

 

네트워킹 

  네트워킹에 필요한 프로토콜 지원.

 

디바이스 드라이버

하드웨어를 추상화하여 관리해주는 기능.

 

 

 

임베디드 시스템(embedded system)

특정 기능을 수행하는 규모가 있는 전자적 시스템으로 구성되는 컴퓨터 시스템 이며, 실시간(real-time computing) 능력의 제한을 갖는다.

http://ko.wikipedia.org/wiki/%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C_%EC%8B%9C%EC%8A%A4%ED%85%9C

 

 

 

책에서 나오는 나빌룩스란?

 책 저자의 닉네임을 붙여서 만든 임베디드 OS.

 

나빌룩스의 구성. 

- 메모리 관리자

- 메모리 정적 할당

- 메모리 동적 할당

- 태스크 관리자

- 태스크 생성

- 태스크 간 전환(컨텍스트 스위칭)

- 스케줄러

- 메시지 관리자

- 태스크 간 통신

- 상호배제(뮤텍스)

- 세마포어

- 디바이스 드라이버 관리자

- 순차접근 장치 

- 커널 서비스

- OS timer

- 시스템 콜

- IRQ 핸들러

 

 

 

환경 구축하기

  원래 임베디드 장비는 PC에 비해서 성능이 떨어진다. 그래서 PC에서 컴파일하고 빌드하여 나온 이미지를 장비로 옮기는 것이 효율적인데, 그것에 대한 환경을 구축해야한다. 이런 환경을 구축하는 것을 ‘목표 플랫폼에 맞추어 크로스 컴파일 환경을 구축’한다라는 용어로 책에 소개되어 있다. 조금 더 정리하자면 컴파일하고 빌드한 이미지가 목표한 플랫폼에서 실행되도록 환경을 구축한다는 것이다.

 

책 저자가 사용한 플랫폼.

ARM 아키텍쳐. 가장 많이 사용함.
http://ko.wikipedia.org/wiki/ARM_%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98

 

MCU(Micro Controller Unit) :

CPU기능은 물론이고 일정한 용량의 메모리, 입출력 제어 인터페이스, 주변장치 컨트롤러 회로까지 칩 하나에 내장한 반도체.

 

책 저자의 개발환경

1. arm-linux v3.3.2, 이지보드 사용
2. linux, arm-linux v3.3.2, qemu v0.9.1(gcc-3.x), gumstix_uboot 사용. 

 

  1번의 경우 돈이 충분하다면 이지보드를 구입하여 하면 된다. (약 10만원정도로 알고 있다.) 

 

  2번의 경우 qemu의 버전이 옛날 버전이라 gcc를 3.x버전으로 다운그레이드 해야한다.(2014-12 기준으로 ubuntu에는 3.x 패키지를 지원안함.) 번거로운 작업이 된다. 환경구축하다가 빡쳐 죽을뻔했다.

 

 

나의 개발환경

1. ubunt, arm-linux v3.3.2, qemu 최신판, ezboot 사용.
  이렇게 사용 할 것이다. 책에는 qemu 0.9.1버전을 사용하려면 gcc를 다운그레이드 해야하지만 나는 gcc 4.x버전으로 qemu 최신버전을 돌릴 것이다. 

반응형
반응형

문제 설명

선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.

예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다.

위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다.

선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.

 

제한 조건

  • 스킬은 알파벳 대문자로 표기하며, 모든 문자열은 알파벳 대문자로만 이루어져 있습니다.
  • 스킬 순서와 스킬트리는 문자열로 표기합니다.
    • 예를 들어, C → B → D 라면 CBD로 표기합니다
  • 선행 스킬 순서 skill의 길이는 2 이상 26 이하이며, 스킬은 중복해 주어지지 않습니다.
  • skill_trees는 길이 1 이상 20 이하인 배열입니다.
  • skill_trees의 원소는 스킬을 나타내는 문자열입니다.
    • skill_trees의 원소는 길이가 2 이상 26 이하인 문자열이며, 스킬이 중복해 주어지지 않습니다.

입출력 예

 

skill skill_trees return
CBD [BACDE, CBADF, AECB, BDA] 2

 

입출력 예 설명

  • BACDE: B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트립니다.
  • CBADF: 가능한 스킬트리입니다.
  • AECB: 가능한 스킬트리입니다.
  • BDA: B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트리입니다.

 

반응형

'Algorithm Study > Programmers' 카테고리의 다른 글

타일 장식 / python  (0) 2020.03.06
N개의 최소공배수/java  (0) 2019.08.28
피보나치 수 / java  (0) 2019.08.28
자연수 뒤집어 배열로 만들기/java  (0) 2019.08.28
약수의 합 / java  (0) 2019.08.28
반응형

문제 설명

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.

 

제한 사항

  • arr은 길이 1이상, 15이하인 배열입니다.
  • arr의 원소는 100 이하인 자연수입니다.

입출력 예

arr result
[2,6,8,14] 168
[1,2,3] 6

나의 코드

import java.util.Arrays;
 
class Solution {
  public  int solution(int[] arr) {
	Arrays.sort(arr);
	int lcm = arr[0] * arr[1] / gcd(arr[0], arr[1]);
		
	for (int i = 2; i < arr.length; i++) {
		lcm = lcm * arr[i] / gcd(lcm, arr[i]);
	}
		
	return lcm;
  }
	
  public static int gcd(int small, int big) {
	while (small != 0) {
		int nmg = big % small;
		big = small;
		small = nmg;
	}
	return big;
  }
}

 

다른사람 코드

// 문제가 개편 되었습니다. 이로 인해 함수 구성이 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
class NLCM {
    public long nlcm(int[] num) {
        long answer = num[0],g;
    for(int i=1;i<num.length;i++){
      g=gcd(answer,num[i]);
            answer=g*(answer/g)*(num[i]/g);
    }
        return answer;
    }
    public long gcd(long a,long b){
    if(a>b)
      return (a%b==0)? b:gcd(b,a%b);
    else 
      return (b%a==0)? a:gcd(a,b%a);
  }
    public static void main(String[] args) {
        NLCM c = new NLCM();
        int[] ex = { 2, 6, 8, 14 };
        // 아래는 테스트로 출력해 보기 위한 코드입니다.
        System.out.println(c.nlcm(ex));
    }
}
반응형

'Algorithm Study > Programmers' 카테고리의 다른 글

타일 장식 / python  (0) 2020.03.06
스킬트리/java  (0) 2019.08.28
피보나치 수 / java  (0) 2019.08.28
자연수 뒤집어 배열로 만들기/java  (0) 2019.08.28
약수의 합 / java  (0) 2019.08.28
반응형

문제 설명

피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다.

예를들어

  • F(2) = F(0) + F(1) = 0 + 1 = 1
  • F(3) = F(1) + F(2) = 1 + 1 = 2
  • F(4) = F(2) + F(3) = 1 + 2 = 3
  • F(5) = F(3) + F(4) = 2 + 3 = 5

와 같이 이어집니다.

2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.

 

제한 사항

* n은 1이상, 100000이하인 자연수입니다.

 

입출력 예

return
3 2
5 5

나의 코드

class Solution {
  public int solution(int n) {
      int answer = 0;
      int a = 0;
      int b = 1;
      
      for(int i =0; i<n; i++){
          int c = (a+b)%1234567;
          a = b%1234567;
          b = c%1234567;
      }
      return a;
  }
}

 

다른 사람 코드

class Solution {

    public int solution(int n) {
        int answer = 0;
        long[] pib=new long[n+1];
        pib[0]=0L;
        pib[1]=1L;
        int times=1;
        for(int i=2; i<=n; i++){
            pib[i]=(pib[i-1]+pib[i-2])%1234567L;
        }
        //answer=(int)(pib[n]%1234567L);
        answer=(int)(pib[n]);
        return answer;
    }
}
반응형

'Algorithm Study > Programmers' 카테고리의 다른 글

스킬트리/java  (0) 2019.08.28
N개의 최소공배수/java  (0) 2019.08.28
자연수 뒤집어 배열로 만들기/java  (0) 2019.08.28
약수의 합 / java  (0) 2019.08.28
수박수박수박수박수박수?/java  (0) 2019.08.28
반응형

문제 설명

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

 

제한 조건

  • n은 10,000,000,000이하인 자연수입니다.

입출력 예

n return
12345 [5,4,3,2,1]

 


나의 코드

class Solution {
  public int[] solution(long n) {
      String tempStr = new String(n+"");
      char[] tempChar = tempStr.toCharArray();
      int[] answer=new int[tempChar.length];
      for(int i =0; i<tempChar.length; i++){
          answer[i] = Integer.parseInt(tempChar[tempChar.length-1-i]+"");
      }
      return answer;
  }
}

 

다른사람 코드

class Solution {
  public int[] solution(long n) {
      String a = "" + n;
        int[] answer = new int[a.length()];
        int cnt=0;

        while(n>0) {
            answer[cnt]=(int)(n%10);
            n/=10;
            System.out.println(n);
            cnt++;
        }
      return answer;
  }
}
반응형

'Algorithm Study > Programmers' 카테고리의 다른 글

N개의 최소공배수/java  (0) 2019.08.28
피보나치 수 / java  (0) 2019.08.28
약수의 합 / java  (0) 2019.08.28
수박수박수박수박수박수?/java  (0) 2019.08.28
두 정수 사이의 합 / java  (0) 2019.08.28
반응형

문제 설명

자연수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

 

제한 사항

  • n은 0 이상 3000이하인 자연수입니다.

입출력 예

n return
12 28
5 6

나의 코드

class Solution {
  public int solution(int n) {
      int answer = 0;
      
      for(int i = 1; i <= n; i++){
          if(n%i ==0)
              answer += i;
      }
      return answer;
    }
}

다른사람 코드

class SumDivisor {
    public int sumDivisor(int num) {
        int answer = 0;
            for(int i = 1; i <= num/2; i++){
        if(num%i == 0) answer += i;
      }
        return answer+num;
    }
}
반응형

'Algorithm Study > Programmers' 카테고리의 다른 글

피보나치 수 / java  (0) 2019.08.28
자연수 뒤집어 배열로 만들기/java  (0) 2019.08.28
수박수박수박수박수박수?/java  (0) 2019.08.28
두 정수 사이의 합 / java  (0) 2019.08.28
2016년/java  (0) 2019.08.28

+ Recent posts