증감 연산자

타입 설명                                       사용 예
전위형   값이 참조되기 전에 증가 시킨다.    j = ++i; 
후위형   값이 참조된 후에 증가 시킨다.    j = i++;

 

비트 연산자

| (OR)     피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다. 
& (AND)   피연산자 양 쪽이 모두 1이어야만 1을 결과로 얻는다. 그 외에는 0을 얻는다.  
^ (XOR)  피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다.

 

향상된 for 문

for ( 타입 변수명 : 배열 또는 컬렉션) {
 // 반복할 문장
}

ex) 
for (int = 0; i < arr.length; i++) {
   System.out.println(arr[i]);
}

는 아래와 같음

for(int tmp : arr) {
 System.out.println(tmp);
}

 

do - while문

while 문은 조건식의 결과에 따라 블럭{} 이 한번도 수행되지 않을 수 있지만, do - while 문은 최소한 한번은 수행될 것을 보장한다.

do {
	// 조건식의 연산결과가 참일 때 수행될 문장들을 적는다.
} while (조건식) ;

 

continue 문

continue 문은 반복문 전체를 벗어나지 않고 다음 반복을 계속 수행한다는 점이 break문과 다르다. 
주로 if문과 함께 사용되어 특정 조건을 만족하는 경우에 continue문 이후의 문장들을 수행하지 않고 다음 반복으로 넘어가서 계속 진행하도록 한다. 

이름 붙은 반복문

break문은 근접한 단 하나의 반복문만 벗어날 수 있기 때문에, 여러 개의 반복문이 중첩 된 경우에는 break문으로 중첩 반복문을 완전히 벗어 날수 없다.
이때는 중첩 반복문 앞에 이름을 붙이고 break문과 continue문에 이름을 지정해 줌으로써 하나 이상의 반복문을 벗어나거나 반복을 건너뛸 수 있다.

System.arraycopy( )를 이용한 배열의 복사

배열의 복사는 for문보다 System.arraycopy( )를 사용하는 것이 효율적이다.

for (int i = 0; i < num.length; i++) { newNum[i] = num [i]; }

는 아래와 같이 쓸 수 있다.

System.arraycopy(num, 0, newNum, 0, num.lenght) ;

'JAVA' 카테고리의 다른 글

자바의 정석 공부 1~2단원  (0) 2020.11.13

문제 설명

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.

  • 구조대 : 119
  • 박준영 : 97 674 223
  • 지영석 : 11 9552 4421

전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.

제한 사항

  • phone_book의 길이는 1 이상 1,000,000 이하입니다.
  • 각 전화번호의 길이는 1 이상 20 이하입니다.

입출력 예제

phone_bookreturn

[119, 97674223, 1195524421] false
[123,456,789] true
[12,123,1235,567,88] false

입출력 예 설명

입출력 예 #1
앞에서 설명한 예와 같습니다.

입출력 예 #2
한 번호가 다른 번호의 접두사인 경우가 없으므로, 답은 true입니다.

입출력 예 #3
첫 번째 전화번호, “12”가 두 번째 전화번호 “123”의 접두사입니다. 따라서 답은 false입니다.


알림

2019년 5월 13일, 테스트 케이스가 변경되었습니다. 이로 인해 이전에 통과하던 코드가 더 이상 통과하지 않을 수 있습니다.

출처

 

NCPC - Nordic Collegiate Programming Contest

NCPC Nordic Collegiate Programming Contest NCPC 2020 was held on the 7th of November 2020, 11-16 CET (UTC+1). 221 teams from 27 different universities competed throughout the Nordic and Baltic countries. The winning team was Gamlebamserne from University o

nordic.icpc.io

문제 풀이>

class Solution {
    public boolean solution(String[] phoneBook) {
       for(int i=0; i<phoneBook.length-1; i++) {
            for(int j=i+1; j<phoneBook.length; j++) {
                if(phoneBook[i].startsWith(phoneBook[j])) {return false;}
                if(phoneBook[j].startsWith(phoneBook[i])) {return false;}
            }
        }
        return true;
    }
}

startsWith(String)

startsWith(String)는 String 타입을 인자로 받으며, 해당 String 객체가 인자로 전달된 String으로 시작한다면 true를 리턴하고 그렇지 않다면 false를 리턴합니다.

endsWith(String)

endsWith(String)는 String 타입을 인자로 받으며, 해당 String 객체가 인자로 전달된 String으로 끝난다면 true를 리턴하고 그렇지 않다면 false를 리턴합니다.

'알고리즘' 카테고리의 다른 글

<완전탐색> 모의고사  (0) 2020.09.30
<해쉬>완주하지 못한 선수  (0) 2020.09.28
<정렬> K번째수  (0) 2020.09.27
error: Target of URI doesn't exist: 'package:flutter/material.dart'.

맥에서 작업하던 flutter 프로젝트를 윈도우 노트북에서 불러오니 위와 같은 에러가 발생

pubspec.yaml 에서 'pub get' 프로젝트 설정 업데이트를 해주니 문제 해결

Unsupported Modules Detected: Compilation is not supported for following modules: . Unfortunately you can't have non-Gradle Java modules and Android-Gradle modules in one project.

 

로컬로 백업해둔 프로젝트를 Android Studio에  import 하는 과정에서 위와 같은 애러 메시지가 뜨면서

컴파일이 되지 않거나, 프로잭트가 소스가 중복으로 생성되는 현상이 발생

실행하고 있는 안드로이드 스튜디오를 종료 -> 해당 프로젝트가 있는 위치로 이동(탐색기 또는 파인더) ->

.idea 폴더를 삭제 -> 모든 .iml 파일들을 삭제

 

이렇게 하고 다시 실행해보니 잘 작동하게됨

 

다시 자바 기본 개념을 공부하기위해 '자바의 정석' 공부 시작

 

리터럴(literal)

 

프로그래밍에서 상수를 '값을 한번 저장하면 변경할 수 없는 저장공간' 으로 정의 하였기 때문에 이와 구분하기 위해 상수를 다른 이름으로 불러주기 위한 이름

변수(variable) 하나의 값을 저장하기 위한 공간

상수(constant) 값을 한번만 저장할 수 있는 공간

리터럴(literal) 그 차체로 값을 의미하는 것

예시)

int year = 2014;

    변수    리터럴

final int MAX_VALUE = 100;

                상수               리터럴

 

음수의 2진 표현을 구하는 방법

(1) 음수의 절대값을 2진수로 변환한다.

 : -5의 절대값인 5를 2진수로 변환한다. 10진수 5를 2진수로 변환하면 '0101'이다.

 

(2) (1) 에서 구한 2진수의 1을 0으로 0은 1로 바꾼다. (1의 보수 구하기)

 : '0101'이 '1010' 이 된다.

 

(3) (2) 의 결과에 1을 더한다. (2의 부수 구하기, 1의 보수 +1)

 : '1010'에 1을 더하면 '1011'이 되고, 이것이 -5의 2진 표현이다.

 

실수 표현형식

기호     의미                    설명         

S        부호(Sign bit)        0이면 양수, 1이면 음수

E        지수(Exponent)     부호있는 정수. 지수의 범위는 -127 ~ 128(float), -1023~1024(double)

M       가수(Mantissa)      실제값을 저장하는 부분. 10진수로 7자리(float), 15자리(double)의 정밀도로 저장가능 

 

'JAVA' 카테고리의 다른 글

자바의 정석 공부 3~5단원  (0) 2020.12.03

새노트북을 구입하여 윈도우 사용자 명을 영어로 설정하는걸 깜빡하고, 한글로 설정해버려

Android studio 설치 경로 아스키코드 오류가 발생

Your project file contains non-ASCII characters. 

SDK설치 경로를 d:\android\sdk 로 변경 하여 설치를 완료 할 수 있었는데

에뮬레이터 실행 과정중 애러발생

emulator: panic: broken avd system path. check your android_sdk_root value [d:\android\sdk]

몇시간 구글링 검색하면 대부분 아래 변수를 수정하라고 하지만 해결이안됨

환경변수

변수 이름 : ANDROID_HOME 

변수 값 : D:\Android\Sdk

변수 이름 : ANDROID_ SDK_ROOT 

변수 값 : D:\Android\Sdk

그러다 추가로 아래 환경변수를 추가하니 해결완료

변수 이름 : ANDROID_AVD_HOME 

변수 값 : D:\Android\Sdk

문제 설명

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한 조건

  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

입출력 예

answersreturn

[1,2,3,4,5] [1]
[1,3,2,4,2] [1,2,3]

입출력 예 설명

입출력 예 #1

  • 수포자 1은 모든 문제를 맞혔습니다.
  • 수포자 2는 모든 문제를 틀렸습니다.
  • 수포자 3은 모든 문제를 틀렸습니다.

따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.

입출력 예 #2

  • 모든 사람이 2문제씩을 맞췄습니다.

 

풀이>>

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

class Solution {
    public int[] solution(int[] answers) {
        int[] arr1 = {1, 2, 3, 4, 5};
        int[] arr2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] arr3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
 
        HashMap<Integer, Integer> hm = new HashMap<>();
        hm.put(1, 0);
        hm.put(2, 0);
        hm.put(3, 0);
        //정답 갯수 Count
        for (int i = 0; i < answers.length; i++) {
            int num = answers[i];
            if (arr1[i%5] == num) hm.replace(1, hm.get(1)+1);
            if (arr2[i%8] == num) hm.replace(2, hm.get(2)+1);
            if (arr3[i%10] == num) hm.replace(3, hm.get(3)+1);
            System.out.print(hm.get(3));

        }
        //최대 값 구하기
        int max = hm.get(1);
        for (Integer val : hm.values()) {
            if (val > max) {
                max = val;
            }
        }
        //정답 리스트 형성
        ArrayList<Integer> answerList = new ArrayList<>();
        for (Integer key : hm.keySet()) {
            if (hm.get(key) == max) {
                answerList.add(key);
            }
        }
        //정렬 및 배열로 변환
        int[] answer = new int[answerList.size()];
        Collections.sort(answerList);
        for (int i = 0; i < answer.length; i++) {
            answer[i] = answerList.get(i);
        }
        return answer;
    }
}

'알고리즘' 카테고리의 다른 글

<해시> 전화번호목록  (0) 2020.11.24
<해쉬>완주하지 못한 선수  (0) 2020.09.28
<정렬> K번째수  (0) 2020.09.27

문제 설명

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
  • completion의 길이는 participant의 길이보다 1 작습니다.
  • 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
  • 참가자 중에는 동명이인이 있을 수 있습니다.

입출력 예

participantcompletionreturn

[leo, kiki, eden] [eden, kiki] leo
[marina, josipa, nikola, vinko, filipa] [josipa, filipa, marina, nikola] vinko
[mislav, stanko, mislav, ana] [stanko, ana, mislav] mislav

입출력 예 설명

예제 #1
leo는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #2
vinko는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #3
mislav는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.

 

풀이>>

import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

class Solution {

 public String solution(String[] participant, String[] completion) {

        String answer = "";
        HashMap<String, Integer> hm = new HashMap<>();

        for (String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1); 

     //hm.put(player 키, player 키값 존재하면 player key 값 넣어주고, 없으면 기본값 0 ,그리고 +1)

        for (String player : completion) hm.put(player, hm.get(player) - 1);

        for (String key : hm.keySet()) {

         if (hm.get(key) != 0) {

             answer = key; 

         }

         }

         return answer; 

        } 

      }

getOrDefault : 찾는 key 가 존재하면, key 의 value 반환, 없으면 기본 value 값 반환

'알고리즘' 카테고리의 다른 글

<해시> 전화번호목록  (0) 2020.11.24
<완전탐색> 모의고사  (0) 2020.09.30
<정렬> K번째수  (0) 2020.09.27

문제 설명

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

  1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
  2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
  3. 2에서 나온 배열의 3번째 숫자는 5입니다.

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항

  • array의 길이는 1 이상 100 이하입니다.
  • array의 각 원소는 1 이상 100 이하입니다.
  • commands의 길이는 1 이상 50 이하입니다.
  • commands의 각 원소는 길이가 3입니다.

입출력 예

arraycommandsreturn

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

입출력 예 설명

[1, 5, 2, 6, 3, 7, 4]를 2번째부터 5번째까지 자른 후 정렬합니다. [2, 3, 5, 6]의 세 번째 숫자는 5입니다.
[1, 5, 2, 6, 3, 7, 4]를 4번째부터 4번째까지 자른 후 정렬합니다. [6]의 첫 번째 숫자는 6입니다.
[1, 5, 2, 6, 3, 7, 4]를 1번째부터 7번째까지 자릅니다. [1, 2, 3, 4, 5, 6, 7]의 세 번째 숫자는 3입니다.

출처

 

 

Northern Eurasia Contests

Northwestern Russia Regional Contest Information Host city: St Petersburg Host universities: St Petersburg ITMO University, St Petersburg State University Participants Participating regions: the Archangel Region, the Republic of Karelia, the Leningrad Regi

neerc.ifmo.ru

풀이>>

import java.util.Arrays;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        
        for(int i = 0; i<commands.length; i++) {
          
            int[] array1 = Arrays.copyOfRange(array, commands[i][0]-1, commands[i][1]);
            Arrays.sort(array1);
            answer[i]= array1[commands[i][2]-1];
         
        }
        
        return answer;
    }
}

'알고리즘' 카테고리의 다른 글

<해시> 전화번호목록  (0) 2020.11.24
<완전탐색> 모의고사  (0) 2020.09.30
<해쉬>완주하지 못한 선수  (0) 2020.09.28

 

이번 포스팅은 중소기업 전세자금 대출을 성공적으로 실행 후 작성하는 후기입니다.

 

저는 원래 원룸 월세를 살고 있었습니다.

살고 있는 원룸이 관리비 포함 45만원정도 인데... 이 돈이 너무 아까워

전세를 알아봐야겠다는 생각이 들었습니다.

정보를 찾아보던 중 중소기업 전세자금대출을 알게 되었습니다. 

대출을 진행하면서 구글링을 해보시면 아시겠지만, 기존에 정리를 잘 해놓은 분들이 많으셔서 많은 도움을 받았습니다.

개개인 마다 상황이 달라 알 수 없는 정보들도 있었기에 만약 대출에 성공하면

나와 비슷한 상황인 분들을 위해 후기를 남겨야지라는 생각에 글을 쓰게 되었습니다.

저는 천성이 공돌이라 글쓰는 재주가 없지만 대출받으시는 분들에게 조금이라도 도움이 되고자 글을 후기를 작성해봅니다.

 

 포스팅은 보시는 분들이 어느정도 중소기업 전세자금대출이 뭔지는 알고 있을꺼라고 생각을 하고 제 상황의 기준으로 글을 쓰겠습니다. 

 

다들 알다시피 중소기업 청년대출은 두가지가 있습니다.

주택도시보증공사(최대 보증금 100%)와 한국주택금융공사(최대 보증금80%)

둘다 보증금에서 최대 1억까지 대출이 가능하지만, 한국주택금융공사에서 진행하는 상품은 80%내의 범위 내에서 1억까지 입니다.

저는 한국주택금융공사 (최대 보증금 80%)를 받았습니다.

지방이면 모를까 서울 같은 경우는 중기청 대출되는 전세를 구하기도 힘들뿐더러

80%는 임차인의 신용을 보지만, 100%는 임대인의 신용을 보고, 복잡한 절차 동의를 구해야 하기 때문에,

설득시키기 힘들어 받기가 너무 힘듭니다 ㅜㅜ.

※ 2021년 12월까지만 신청이 가능하다고 하니, 전세 대출을 받으실 분들은 서둘러주시는 게 좋을 것 같아요.

 

1. 나의 상태 체크

중소기업 근무 (2년)

연소득 3500만 원 이하

만 35세 (중소기업 청년 대출 자격은 만 34세까지이나 남자인 경우 군 복무를 했으면 39세까지 자격 됨 )

무주택자 (주민등록등본상 부모님과 같은 세대 있지만 예비 단독 세대주라고 하면 진행됨)

신용 2등급, 신용카드 사용, 대출이력은 있으나 전부 상환했음.

나의 주거래은행 : 신한은행

회사 주거래은행 : 기업은행

개인 신용 대출 한도 체크 : 2000만 원 대출 가능함.

(80% 대출을 진행하다 보니 나머지 20% 돈이 더 필요한데, 저 같은 경우 여유가 없어 추가 신용대출은 진행했습니다.)

 

전세 보증금 최대 1억2천 까지 목표로 정함

 

2. 전세집 알아보기

저 같은 경우, 다방, 직방, 피터팬 카페를 많이 확인했습니다. 특히 다방, 직방은 필터링을 걸 수가 있어서

최대 전세금액을 1억 2천으로 설정하고, 전세대출 가능하다고 되어있는 곳은 전부 문자를 넣었습니다.

참고로 작년부터 전세집을 알아보기 시작했는데 정말 전세집도 별로 없을 뿐 아니라

그중에서도 중소기업 청년 대출 조건에 맞는 집 찾기가 너무 힘들었습니다.

제가 계약하게 된 집은 원래 1억 3천 짜리였는데, 전세금 최대 1억 2천까지 알아보고 있다고 공인중개사분에게 말하니

그럼 1억 2천에 월 5만 원 반전세로 계약하는 건 어떠냐라고 제안을 해주어서 그렇게 진행하기로 했습니다.

워낙 중기청 대출되는 전세 찾기가 힘들기도 했고, 1년 동안 전셋집을 구하다 보니 지쳐서 이렇게 라도 진행하게 되었습니다.

 

3. 가심사 

우선 마음에 드는 집을 발견하게 되면 가심사를 넣어볼 수 있는데, 다른 분들은 정보로는 주소지만 알고 있으면

중소기업대출이 가능한 은행에서 대출 여부를 알아볼 수가 있다고 합니다.

하지만 저는 번번이 가심사 넣는 것을 실패하였습니다.

제가 방문한 은행은 회사 주변에 있는 신한은행, 기업은행이었는데 

지점들마다 전부 계약서를 가져와야 심사를 봐줄 수 있다고 해서

가심사를 받아볼 수 없었습니다.

참고로 가심사 받을 때 계약하기 전에 준비할 수 있는 서류는 다 들고 갔습니다.

아직 계약을 하기 전인데 어떻게 계약을 써오라는 말인지 참 답답했습니다.

이게 중소기업 청년 대출 진행을 안 해본 대출 담당자를 만나게 되면 오히려

나보다 몰라 제가 설명해줘야 되는 상황도 발생하게 됩니다.

그래서 만약 진행하시게 되면 중소기업대출 진행 많이 해본 담당자에게 하시는 것이 정신건강에 좋습니다 ㅜㅜ

 

4. 가계약

구글링을 해보면 안전하게 가심사 받고, 대출 가능하면 가계약을 진행하라고 되어있는데... 

서울 같은 경우 중소기업 대출되는 집은 마음에 들면 무조건 먼저 가계약금 걸어야 됩니다.

아니면 집을 놓치게 됩니다.

저보다 앞에 집을 보고 간 사람이 바로 당일 가계약했다고 해서 놓치고,

가심사 넣고, 마음에 들어 연락해보면 이미 계약 끝났다고 해서 놓치고,

가심사 넣고, 가계약금 넣으면 다 놓치겠구나는 생각에 

이번는 집 구경한 바로 당일 가계약금 걸었습니다.

가계약금 걸기 전에 우선 중소기업 청년 대출되는 집인지 중개사를 통해 체크했습니다.

 

<가계약 전 체크>

1. 근저당이 체크(등기부등본 체크)

   -  근저당 대략 7천 정도 잡혀있었는데 집주인이 근저당 말소해준다고 말씀해주셨음

2. 불법건축물 확인(건축물대장 체크)

  - 불법건축물 아님.

3. 다가구인지 다세대인지 확인(등기부등본 체크)

  - 다세대 주택이었음.

4. 대출심사에 떨어질 경우 계약금 돌려받을 수 있는지 체크

 - 가능함

 

가계약은 문자로 진행했습니다.

내용은 공인중개사분이 문자로 작성해주셨고 토스로 임대인에게 100만원을 입금했습니다. 

+ Recent posts