2022/02 21

[백준 18428] - 감시 피하기(JAVA)

출처 - https://www.acmicpc.net/problem/18428 18428번: 감시 피하기 NxN 크기의 복도가 있다. 복도는 1x1 크기의 칸으로 나누어지며, 특정한 위치에는 선생님, 학생, 혹은 장애물이 위치할 수 있다. 현재 몇 명의 학생들은 수업시간에 몰래 복도로 빠져나왔는데, 복 www.acmicpc.net [문제풀이 전] 이코테 DFS&BFS 20번 문제이기도 합니다. 연구소 문제를 먼저 풀어봐서인지 쉽게 해결했습니다. 똑같이 3개의 장애물을 모든 경우에 세우고 감시의 여부를 구해야하는데 여기서 신경써야 할 점인게 선생님끼리 감시가 겹쳤을 때 처리만 잘 해준다면 될 것 같습니다. [문제풀이] N제한이 작아 모든 배열에 기둥을 3개씩 설치하는 경우는 36 C 3 으로 10,000 이..

백준 문제풀이 2022.02.10

[백준 18405] - 경쟁적 전염(JAVA)

[문제] https://www.acmicpc.net/problem/18405 18405번: 경쟁적 전염 첫째 줄에 자연수 N, K가 공백을 기준으로 구분되어 주어진다. (1 ≤ N ≤ 200, 1 ≤ K ≤ 1,000) 둘째 줄부터 N개의 줄에 걸쳐서 시험관의 정보가 주어진다. 각 행은 N개의 원소로 구성되며, 해당 위치 www.acmicpc.net [문제풀이 전] 이코테 책뒤에 DFS&BFS 17번 문제로 나온 문제이기도 하다. 백준에서 정답률 28%로 낮은 정답률을 보유하고 있는데 요즘 스터디의 효과를 보는지 한번에 통과해서 기분이 좋았다. 아마 이 문제에서 접근하기 어려운점이 모든 바이러스는 1초마다 상, 하, 좌. 우 방향으로 증식하는데 바이러스는 매 초마다 낮은 종류의 바이러스가 증식하고 그 시..

백준 문제풀이 2022.02.09

클래스변수, 인스턴스변수, 지역변수 - JAVA

변수는 선언위치에 따라 종류가 다릅니다. 클래스변수, 인스턴스변수, 지역변수 모두 세 종류가 있습니다. '선언된 따라 종류가 결정되므로 어느 영역에 선언되었는지 파악하는 게 중요합니다. 멤버변수를 제외한 나머지 변수들은 모두 지역변수이며, 멤버변수 중 static 이 붙은 것은 클래스변수, 붙지 않은 것은 인스턴스 변수입니다. 예시) public class varExam { int instanceVariable; //인스턴스변수 static int classVariable; //클래스변수 (static변수, 공유변수) void method(){ int localVariable; //지역변수 } } 인스턴스 변수(instance vairable) - 클래스 영역에 선언 - 클래스 인스턴스를 '생성할 때' ..

배열의 복사 - JAVA

배열을 복사를 하려고 하는데 변수처럼 '=' 연산자로 넣으면 쉽게 되겠네? 라고 생각을 했다가 문제가 생겨서 한참을 찾아 헤맨 기억이 있습니다.. 자바의 정석에서 마침 이 파트가 있어 개인적으로 정리를 포스팅 하게 되었습니다. 우선 배열의 복사는 for문을 이용하여 배열을 복사하는 방법 ( 값을 for문을 돌며 다 넣어주기) , '=' 연산자를 사용하는 방법 ( ex. arr = arr2 ), System.arraycopy( ) 를 이용하여 배열을 복사하는 방법이 있습니다. for문 이용하여 값을 넣거나 System.arraycopy( ) 는 Deep copy(깊은 복사) 로서 '실제값'을 넣어주게 되지만 arr = arr2 와 같은 방식은 Shallow copy(얕은 복사)로 '주소값'을 복사하게 됩니..

for each 문 - JAVA

알고리즘을 풀거나 스프링 할때도 많이 사용되어 따로 정리를 하게 되었습니다. for each 문이라고 흔히 부르는데 '자바의 정석'에서 향상된 for문(enhanced for statement) 이라 명칭하고, JDK1.5 부터 배열과 컬렉션에 저장된 요 소에 접근할 때 기존의 사용하던 방법보다 편하게 처리할 수 있습니다. 사용방법 for( 타입 변수명 : 배열 or 컬렉션) { // 반복할 문장 } 사용 방법은 위와 같은 구조인데 글로만 적으면 어떻게 사용할지 감이 안올 수 있어 기존 for문과 비교하여 보여드리겠습니다. 1. 일반 for문 사용 - 배열 과 ArrayList import java.util.ArrayList; public class forExam { public static void m..

문자열의 비교 - JAVA

코딩테스트에도 문자열의 비교는 자주 활용되기 때문에 따로 정리를 하게 되었습니다. 이 내용을 몰랐을때 자연스럽게 '==' 연산자를 비교하려는데 값이 같은데 다르다고 출력이 되서 당황한 적이 있습니다. 우선 String 변수를 생성할때는 리터럴을 이용한 방식과 new 를 이용한 방식이 있습니다. 1. 리터럴을 이용한 방식은 string constant pool 이라는 영역에 선언한 문자열이 이 주소값을 가집니다. String str1 = "ddinguBlog"; String str2 = "ddinguBlog"; 위 같은 선언은 같은 주소를 가르키기 때문에 '==' 연산자를 사용해도 같다고 출력이 됩니다. 2. new 를 이용하게 되면 '==' 연산자로는 비교를 할 수 없습니다. String str = "d..

[프로그래머스 Level2] 괄호 변환 (JAVA) - 2020 Kakao

[문제] 출처 - https://programmers.co.kr/learn/courses/30/lessons/60058?language=java 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 programmers.co.kr [문제 풀기 전] 이 문제에 처음 접근할 때 2번 u, v 를 나누는 처리와 재귀의 처리가 좀 까다로웠다. 재귀는 그냥 진짜 문제에서 하라는대로 반환(return) 하면 되는 것이였고.. u,v 를 나눌 때 따로 ' ( ' 와 ' ) ' 개수가 같아질 때는 생각했는데 문자열을 나누고 만드는 부분이 미숙하였다. 카카오 문제..

프로그래머스 2022.02.06

상수와 리터럴 - JAVA

상수(constant) 는 변수와 마찬가지로 값을 저장할 수 있는 공간 이지만, 변수와 달리 값을 저장하게 되면 다른 값으로 변경이 불가합니다. 변수 선언과 동일하며 변수타입 앞에 final 키워드를 붙여주면 됩니다. 상수는 반드시 선언과 동시에 초기화를 해야합니다. 왜냐하면 앞서 말씀드린 다른 값으로 변경이 불가 하기 때문입니다. public class constant { final int YEAR = 2022; // year 라는 이름의 상수 선언 final int AGE = 29; // age 라는 이름의 상수 선언 AGE = 30; //에러 } 상수는 모두 대문자로 하는 것이 암묵적인 관례이며, 여러 단어로 이루어져 있다면 '_' 로 구분합니다. 리터럴은 원래 20, 2.15, 'C', "ABC"..

변수란? - JAVA

변수란? 단 하나의 값을 저장할 수 있는 메모리 공간입니다. 선언방법? 변수 타입 , 변수 이름 public class variable { int year; // year 라는 이름의 변수 선언 int age; // age 라는 이름의 변수를 선언 } 변수의 선언 : 변수를 선언하게 되면 메모리 빈 공간에 변수타입에 맞는 공간을 확보, 변수 이름을 통하여 사용가능합니다. 초기화 : 변수를 선언할때는 초기화를 해야합니다. 메모리는 여러 프로그램이 공유하는 자원이기 때문에 쓰레기값이 있을 수 있기 때문입니다. 초기화 방법? public class variable { int year = 2022; // year 값 2022로 초기화 int age = 29; // age 값 29로 초기화 } ! 변수의 이름을 ..

자바언어의 특징

자바는 다른 언어에는 없는 많은 장점들을 가지고 있습니다. 대표적인 몇가지에 대해서 정리를 하겠습니다. 1. 운영체제에 독립적 - 자바 응용프로그램은 운영체제, 하드웨어가 아닌 자바가상머신(JVM) 하고만 통신하고 운영되기 때문에 자바로 작성된 프로그램은 운영체제, 하드웨어와 관계없이 실행이 가능하다. 2. 객체지향언어 - 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향언어이다. 3. 자동 메모리 관리(Grabage Collection) - 자바는 가비지컬렉터가 자동적으로 메모리를 관리해줘서 프로그래밍에 집중할 수 있게 도와준다. 4. 네트워크와 분산처리를 지원 - Java API 를 통해 네트워크 관련 프로그램을 쉽게 개발 할 수 있도록 지원한다. 5. 멀티쓰레드를 지원한다. - 자바는 시스템과 관..