자바

    [백준] 10830 행렬 제곱 (JAVA)

    ✉️문제 https://www.acmicpc.net/problem/10830 10830번: 행렬 제곱 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다. www.acmicpc.net 📝 접근 1. B의 범위를 보면 int형 범위가 넘어간다. 따라서 long으로 선언해야 한다. 2. 행렬 배열은 int형으로 선언해도 된다. (제곱하고 각 원소를 1000으로 나누기 때문) 3. 제곱을 100,000,000,000번 하면 시간제한인 1초 안에 풀 수 없다. 따라서 분할 정복법을 이용한다. 🗝 문제풀이 package baekjoon; import java.util.Scanner; publ..

    [백준] 1629 곱셈 (JAVA)

    [백준] 1629 곱셈 (JAVA)

    ✉️문제 https://www.acmicpc.net/problem/1629 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net 📝 접근 for문을 이용한 방법 가장 간단한 방법이 for문을 이용하여 a를 b번 곱해주는 것이다. for(int i = 0; i < b; i++) a *= b; 하지만, 이 방법은 b가 50,000,000이 넘어가면 시간초과가 되어 버린다. (시간 제한 : 0.5). 따라서, O(N)보다 빠른 알고리즘을 고려할 필요가 있다. 분할 정복(Binary Search) 분할 정복은 숫자의 1/2를 반복해서 구하는 것이다. 10^8을 분할 정복으로 구해보자. ..

    [Java] isSameAs와 isEqaulTo

    타입에 따른 값 저장 방법 기본적으로 char, int와 같은 기본형 타입은 값을 저장한다. int num = 1; // 1이라는 값이 저장됨 하지만, Studnet()와 같은 객체는 주소값이 저장된다. Studnet student1 = new Studnet("mango"); isSameAs 테스트할 때 주로 사용되는 isSameAs는 객체의 주소 기반인 == 비교를 한다. 다음 코드의 출력값을 예상해보자. int a = 1; int b = 1; System.out.println(a==b); 출력값으로 true가 나온다. 그렇다면 a와 b의 객체가 같은 주소를 갖고 있다는 말인가? 그렇지 않다. 자바의 == 연산은 객체가 하나라도 원시형이면 값 비교를 한다. 따라서 a == b가 true로 출력이 되는 ..

    [Java] HashMap 기본 사용법

    해싱 개념 HashMap은 키와 값을 묶어서 하나의 데이터로 저장하며, 해싱을 사용하여 많은 양의 데이터를 검색하는데 유용하다. public class HashMap extends AbstractMap implements Map, Cloneable, Serializable { transient Entry[] table; static class Entry implements Map.Entry { final Object key; Object value; } } HashMap은 Entry라는 내부 클래스를 새로 정의하여 연관성이 높은 키와 값을 하나의 배열로 다룰 수 있도록 되어 있다. 해싱 기본 사용법 1. HashMap의 생성 HashMap을 생성할 때는 HashMap() 생성자를 이용하며, 인자로 Has..

    [운영체제] 자바의 동기화 도구

    Java의 모든 객체는 락을 가지고 있다. 이 때, Synchronized메서드를 실행하기 위해서는 락을 얻어야 하는데 다음 2가지 상황이 발생할 수 있다. 1 ) 락을 요청했지만 만약 이미 실행중인 p가 있는 경우 -> 다른 p는 대기해야 한다. (진입 집합) 2 ) sync에 있던 p가 특정 조건을 기다려야 하는 경우 -> 대기 집합 [Java 모니터를 이용한 생산자/소비자] insert(E item) / E remove() 가 주요 함수 public synchronized void insert(E item) { while (count == BUFFER_SIZE) { // 버퍼가 꽉 차 있으면 try { wait(); 대기 } catch { InterruptedException ie } buffer[..