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 = ..
[프로그래머스] 피로도 - Java(자바)
·
자바/코딩테스트
문제 이해 완전탐색 알고리즘으로 모든 경우의 수를 돌아본다. DFS 방식으로 check 배열을 만들어서 내가 다녀온 던전인지를 체크하면서 던전을 탐험한다. 피로도가 해당 던전의 최소피로도와 같거나 높을때 해당 던전을 탐험할 수 있다. 던전을 탐험할때 cnt+1 을 하여 list에 담는다. DFS가 끝이 났을때는 list에 탐험한 던전수가 들어있으므로 max값으로 return한다. import java.util.*; class Solution { static List list = new ArrayList(); static boolean[] check; public int solution(int k, int[][] dungeons) { check = new boolean[dungeons.length]; DF..
[프로그래머스] 튜플 - Java(자바)
·
자바/코딩테스트
문제 이해 특정 튜플을 표현하는 집합이 담긴 문자열이 "{","}"로 표현되어있다. 튜플 안에 집한의 원소의 순서는 바뀌어도 상관없다. 집합의 원소 개수가 answer 배열의 index와 동일하다.(1개 = answer[0], 2개 = answer[1]) 집합 개수에 맞게 오름차순을 해야한다. 집합개수 2개의 경우 (a1, a2) == (a2, a1) 가능하다. 순서 상관없이 튜플이 가능 index = 1 일때 집합의 개수 2개로 위와 같이 존재한다. list.get(0) = a1 이면 list.get(1) = a2, 반대로 list.get(0) = a2 이면 list.get(1) = a1 이 되게끔 만들어야한다. import java.util.*; class Solution { public int[] ..
[프로그래머스] [1차] 캐시 - Java(자바)
·
자바/코딩테스트
문제 이해 LRU(Least Recently Used) 알고리즘으로 캐시에 데이터를 할당할때 캐시가 꽉차면 최근에 사용안한 캐시를 지우는 알고리즘이다. 도시의 이름은 대소문자 가리지 않는다. toUpperCase() 사용 캐시를 List 객체를 사용하여 캐시에 같은 도시명이 존재하면 해당 리스트 index 삭제후 맨뒤에 도시 추가 실행시간 +1 리스트에 존재하지 않으면 실행시간 +5 캐시에 데이터가 존재하는지 확인하는 함수 생성 exitsCache(); import java.util.*; class Solution { public int solution(int cacheSize, String[] cities) { int answer = 0; List cache = new ArrayList(); if(ca..
[프로그래머스] 기능개발 - Java(자바)
·
자바/코딩테스트
문제 이해 진도가 100%가 되는 경우 배포가 되는데 앞의 기능이 끝나기 전까지 뒤의 기능은 배포를 할 수가 없다. 뒤의 기능이 앞의 기능의 배포일보다 적다면 앞의 기능 배포날에 같이 배포 된다. 개발속도에 따른 각 기능의 배포일을 구해 배열에 담는다. 배포일을 두개씩 비교하는데 맨 처음에 나온 값을 first 변수에 넣고 본인보다 큰 값이 나오기전까지 cnt를 증가 시킨다. 큰 값이 나오면 이전에 쌓인 cnt를 리스트에 담고 cnt를 초기화 새로운 값이 first 변수에 담긴다. 마지막 기능 값이 나오면 그동안 쌓인 cnt를 집어 넣는다. import java.util.*; class Solution { public int[] solution(int[] progresses, int[] speeds) {..
대전집주인
일어나 코드짜야지