시작

Codeforces를 위해 간단히 몇가지 사항들을 정리해봅니다. 

1에서 알아볼 건 기본 입출력, 자료형, 반복문, Call By Value ❌ Call By Reference 입니다. 

 

입출력

Java 입출력에는 BufferedReader 버퍼를 이용해서 쓰는 함수를 활용합니다.

이외에도 Scanner를 사용하기도 하지만 속도가 상대적으로 빠르기 때문에 BufferedReader를 사용합니다.

특히, 공식문서에서 입력 스트림에서 문자를 읽을때 효율적으로 읽기 위해 문자를 버퍼에 저장하는것을 권하고 있습니다.

관련해서는 하기 링크를 참조 부탁드립니다.

https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html 

 

BufferedReader (Java Platform SE 8 )

Reads characters into a portion of an array. This method implements the general contract of the corresponding read method of the Reader class. As an additional convenience, it attempts to read as many characters as possible by repeatedly invoking the read

docs.oracle.com

BufferedReader 는 한줄 단위로 읽어옵니다. 

그리고 보통의 경우 공백 단위로 나열된 데이터는 StringTokenizer 를 활용합니다.  

읽어올때는 String 으로 형이 잡히기 때문에 int 를 활용하기 위해서는 파싱을 수행해야 합니다. 

사용법은 다음과 같습니다.

 

자료형

이 포스팅에서는 기본형과 대응되는 래퍼 클러스만 살펴보겠습니다.

타입을 정의할때는 둘 다 사용하긴 하지만 래퍼 클래스가 사용되는 경우는 

✅ 매개변수로 객체를 이용, ✅ 기본형 값이 아니라 객체를 저장, ✅ 객체간 비교를 수행

 

반복문

Java 에서 for문을 두가지 형태로 사용할 수 있습니다. 

기존 for문, 업그레이드 for문(Java 5.0이상부터 지원)

우리가 일반적으로 아는 👀 for문은 아래와 같습니다. 

 

반면 ✏️업그레이드된 for문은 아래와 같습니다. 

같은 결과를 보여줍니다. 

 

프로그래머스 - 음양 더하기 

프로그래머스에서 음양 더하기 문제는 signs가 boolean으로 주어지는데 true, false에 따라 +, - 를 수행하면 되는 문제입니다.

 

Call By Value ❌ Call By Reference

문제를 해결할 때 Call By Value 와 Call By Reference 개념을 혼용하면 접근 시 문제가 되는 건 다음과 같습니다.

함수의 매개변수에 일반 값을 넘기는 경우, 객체를 넘기는 경우가 차이가 납니다. 

일반적으로 자바는 기본형 데이터를 처리할 때 Call By Value형태로 처리를 하게 됩니다. 

하지만 Array와 같은 객체를 전달하게 되면 참조값은 Call By Value 형태로 전달되게 됩니다. 

그래서 Array 값 자체를 함수의 매개변수로 넘겨주게 되면 원본 객체의 주소값을 저장하고 있기 때문에 

함수 내에서 값을 변경해 주면 원본 데이터도 값이 변경됩니다. 

이 경우 Call By Reference로 넘겨주게 되면 주소값을 기억하고 있기 때문에 원본 값이 변경될 수 있다는 사실을 기억하고 있어야 합니다.