[프로그래머스] 하노이의 탑 - Java(자바)
·
자바/코딩테스트
문제 이해 하노이의 탑은 재귀함수 대표 문제이다. 하노이탑의 핵심은 크기가 N인 원반을 시작 점에서 목표 점으로 옮기기 위해서는, 크기가 N-1인 원반을 보조 점으로 먼저 옮기는 것이다. from -> other 로 옮기고 other -> to로 이동하는 재귀함수로 반복하여 리스트에 담으면 된다. import java.util.*; class Solution { static List list = new ArrayList(); public int[][] solution(int n) { hanoi(n,1,3,2); int[][] answer = new int[list.size()][2]; for(int i = 0; i
[프로그래머스] 정수 삼각형 - Java(자바)
·
자바/코딩테스트
문제 이해 삼각형의 꼭대기에서 바닥까지 이어오는 경로중 숫자의 합이 가장 큰 경우를 찾아라 이 문제의 경우 이어지는 경로라고 되어있다. 아래로 내려갈때 대각선 방향의 왼쪽 오른쪽으로만 이동 가능하다. DP로 문제를 해결하고자 했다. 문제와는 다르게 반대로 아래에서 위로 왼쪽 오른쪽을 각자 더했을때 더 큰 숫자를 배열에 남기기로 했다. 아래에서 위로 비교할때 index가 0보다 작을 경우를 체크하면서 값을 채워나가게 했다. import java.util.*; class Solution { public int solution(int[][] triangle) { int answer = 0; int[][] dp = new int[triangle.length+1][triangle.length]; for(int i..
컴파일(compile)와 인터프리터(interpreter)는 무엇일까?
·
자바/개념
컴파일 컴파일 특징컴파일 프로그램을 이용하여 컴파일한다.실행 파일이 만들어진다.실행 파일을 실행시킨다.속도가 빠르다.C++, C, 자바 등이 있다.A 운영체제에서 만든 프로그램을 B 운영처제에서 돌릴 경우, 돌아가지 않을 가능성이 아주 크다(ex int값이 달라지는 경우)모든 코드를 한번에 번역(컴파일)하고, 한번에 실행한다. 그래서 번역과 실행이 따로 이루어진다.컴파일 장점초기 스캔은 오래걸리지만, 한번 스캔을 마치면 실행파일을 만들어 놓고 계속 사용하기 때문에 실행속도는 인터프리터보다 빠르다.컴파일러는 오류 메시지를 생성할때 전체 코드를 검사한 후에 오류 메시지를 생성한다. 그래서 프로그램 실행 전에 오류를 발견 할 수 있다.컴파일 단점프로그램을 실행하는데 필요한 모든 파일을 스캔하기 때문에 초기 스..
JIT(JUST IN TIME) 란?
·
자바/개념
자바는 .java 파일을 컴파일 하여 .class의 바이트코드를 만든다. JVM은 바이트코드를 JIT, 인터프리터 방식을 통해 바이트 코드를 네이티브 코드로 변경해서 운영체제에게 넘겨 코드를 실행시킨다.개념 JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다. 전통적인 입장에서 컴퓨터 프로그램을 만드는 방법은 두 가지가 있는데, 인터프리트 방식과 정적 컴파일 방식으로 나눌 수 있다. 이 중 인터프리트 방식은 실행 중 프로그래밍 언어를 읽어가면서 해당 기능에 대응하는 기계어 코드를 실행하며, 반면 정적 컴파일은 실행하기 전에 프로그램 코드를 기계어로 번역한다. JIT 컴파일러는..
Call by Value, Call by Reference 란?
·
자바/개념
Call by Value 값에 의한 호출 기본 자료형에 적용 변수에 값 자체를 저장 변수를 복사하면 변수의 값 자체를 복사(stack 메모리) 원시타입(primitive type) int, double, char 등 기본 자료형이 속함 파라미터로 값을 던져주고 값이 변경이 되어도 변수의 값을 복사해서 던져 주기 때문에 원본 데이터에는 아무런 지장이 가지 않는다. Call by Reference 참조 값에 의한 호출 배열이나 객체를 참조 변수에는 값이 아니라 객체의 주소 값(참조)이 저장 변수를 복사하면 주소가 복사되어 하나의 객체를 참조하게 됨 참조타입(reference type) String, 배열, 객체 등 원시타입을 제외한 타입을 말함 객체를 메서드의 파라미터로 사용할 경우 값을 전달하는게 아닌 참..
[프로그래머스] 오픈채팅방 - Java(자바)
·
자바/코딩테스트
문제 이해 오픈채팅방에 들어오거나 나갈때 문자열로 기록이 된다. 오픈채팅방을 나갔다가 같은 아이디로 들어왔을때 닉네임이 변경되어있으면 기록된 문자열에 닉네임도 바뀌어야한다. 채팅방을 나가지 않고 닉네임을 변경하였을 경우도 문자열의 닉네임이 바뀌어야한다. 배열의 길이는 100,000 건으로 for문 내에 함수를 사용하거나 메모리 사용량이 적은걸로만 사용해야한다. map을 생성하고 key = id , value = 닉네임 형태로 배열전체를 돌면서 설정한다. map에 id로 할당된 닉네임이 최종 닉네임이다. import java.util.*; class Solution { public String[] solution(String[] record) { Map map = new HashMap(); List res..
[프로그래머스] 스킬트리 - Java(자바)
·
자바/코딩테스트
문제 이해 선행 스킬 순서 skill이 존재한다. skill_trees 의 순서들이 선행 스킬 순서에 맞게 배웠는지 확인한다. 선행 스킬을 베열로 저장하였다. 스킬트리의 문자열을 앞자리부터 비교한다. 배운 스킬이 선행 스킬에 순서에 맞는지 indexOf로 판단한다. 스킬 배우는 순서를 cnt에 입력하여 스킬트리의 배운 스킬의 순서와 맞는지 비교 그렇지 않다면 break로 내보낸다. import java.util.*; class Solution { public int solution(String skill, String[] skill_trees) { int answer = 0; List skillList = new ArrayList(); for(int i = 0; i
[프로그래머스] 땅따먹기 - Java(자바)
·
자바/코딩테스트
문제 이해 한 행씩 내려가면서 땅따먹는다. 점수 최대로 나오게 땅을 따먹어라 한 행씩 내려올 때 같은 열을 연속으로 밟을 수 없다. 예제에는 안나왔지만 같은 행에 같은 점수가 나올수 있고 그 점수가 최대값일수 있다고 생각해야한다. 한 행씩 내려오면서 연속된 열 제외 위 아래 열의 값을 더하여 dp[i][j] 에 나올 수 있는 max값을 배치한다. 마지막 행에 나오는 점수중 max값이 땅따먹기에서 나올 수 있는 최대의 점수이다. import java.util.*; class Solution { int solution(int[][] land) { int answer = 0; // 0행은 [0,0,0,0] int[][] dp = new int[land.length+1][4]; for(int i = 1; i
[프로그래머스] 방문 길이 - Java(자바)
·
자바/코딩테스트
문제 이해 좌표문제로 좌표 범위는 -5 ~ 5까지로 해당 범위를 나가면 안된다. 문자열은 상하좌우를 뜻하는 LRUD가 있다. 문제의 핵심은 좌표범위를 벗어나지 않고 처음가는 길인곳의 길이를 구하는것이다. A -> B == B -> A 두개의 길은 같은길로 처리한다. 리스트에 좌표를 움직이기 전 좌표 + 움직인 후 좌표, 움직인 후 좌표 + 움직이기 전 좌표 로 두가지 경우를 둘다 넣어 문자열로 담아놨다. indexOf를 사용하여 리스트에 존재 하지 않으면 처음 가는길로 간주했다. import java.util.*; class Solution { public int solution(String dirs) { List visit = new ArrayList(); int answer = 0; int[] poi..
[프로그래머스] [3차] 압축 - Java(자바)
·
자바/코딩테스트
문제 이해 A - Z 까지 대문자 사전이 1 ~ 26까지 색인번호를 가지고 있다. 문자열에서 첫글자 다음글자를 자르고 사전과 비교하였을때 사전에 미존재하면 색인번호를 올려서 새로 추가한다. 사전에 없는 문자가 나올때까지 계속 자른다. 문자열은 1000글자 이하로 이중for문을 사용하였다. map에다 A-Z를 키로 색인번호를 value로 생성, 추가되는 사전단어가 나올때마다 색인번호를 올려서 추가 색인번호가 신규 추가가 되면 기존에 사용한 영문자는 사용하면 안된다. cnt에 사용한 영문자의 수를 체크하여 사용못하게 넘어간다. 영문자 tmp 가 msg의 마지막 영문자를 사용하고 해당 문자열이 키에 존재한다면 문자열의 색인번호를 집어넣고 for문을 끝낸다. import java.util.*; class Sol..
[프로그래머스] k진수에서 소수 개수 구하기 - Java(자바)
·
자바/코딩테스트
문제 이해 정수 n을 k진수로 변환시켜야 한다. n은 1,000,000 으로 int형으로 처리 불가 long 타입으로 변환처리 해야한다. String 변수 temp에 k진수로 바꾸어서 만든다. 0이 앞뒤로 존재하면 소수인지 체크해야함으로 split("0") 으로 배열 생성 0000 0이 연속으로 나오면 배열에 "" 공백이 들어감으로 공백체크 필수 소수 판단하는 함수에도 long타입으로 변경후 소수 판단 class Solution { public int solution(long n, int k) { int answer = 0; String temp = ""; while(n > 0){ temp = Long.toString(n%k) + temp; n /= k; } String[] num = temp.split..
[프로그래머스] [1차]뉴스 클러스터링 - Java(자바)
·
자바/코딩테스트
문제 이해 자카드 유사도를 구하고 65536을 곱한 수를 출력해라 자카드 유사도는 두 배열의 교집합/합집합이다. 문자열을 2글자씩 잘라서 넣는데 영문이 아니라면 그 문자는 삭제한다. 교집합을 구할때는 두 배열을 비교하면서 사용한 index인지 check를 통해 확인후 교집합의 개수를 구한다. double 형태로 자카드 유사도가 나오기 때문에 cnt + 0.0을 함으로 형 변환후 자카드 유사도를 구한다. import java.util.*; class Solution { public int solution(String str1, String str2) { int answer = 0; str1 = str1.toUpperCase(); str2 = str2.toUpperCase(); List str1List = ..
대전집주인
'자바' 태그의 글 목록 (2 Page)