728x90

반복문 

 - for ( 변수선언 및 초기화; 반복 조건; 변수 증감 )

for(int i=0;i<10;i++){

반복문;

}

 - while (반복 조건)

int k=0; //반복변수 초기화

while(k<10) { //반복변수비교(반복조건)

반복문;

k++; //반복변수증가(감소)

}

무한 루프

for(;;){

}

 

while(true) {

}

while(k==0) {

//변수를 증감시키지 않으면 계속 true 

}

조건문 

 - if (조건)

ex) 윤년 == 4의 배수이면서 100의 배수가 아닌 년도 중 400의 배수인 해를 포함

if(year%4==0 && year%100!=0 || year%400 ==0) {

msg = "윤년";

}else {

msg = "평년";

}

ex) 문자 판별 == 대문자, 소문자, 숫자 판별

if(c>='A' && c<='Z') {

}

if(c>='a' && c<='z') {

 

}

if(c>='0' && c<='9') {

 

}

if(c>='가' && c<='힣'){

}

 -switch (변수)

  case 리터럴:

   명령문

   break;

   default : 

    명령문

    break;

int level = 1;

switch(level){

case 1:

System.out.println("실행할 코드");

//break; 코드가 없으면 다음 case 2도 이어서 실행

case 2:

case 3:

System.out.println("level이 2와 3인 경우 모두 실행할 코드");

break;

default : //else문처럼 만족하는 값이 없으면 실행

System.out.println("실행할 코");

break;

}

 

논리합 || Or 또는

true||true=true;

true||false=true;

false||true=true;

false||false=false;

 

논리곱 && and 그리고

true&&true=true;

true&&false=false;

false&&true=false;

false&&false=false;

 

728x90

두개의 문자열이 주어질 때, 문자열의 순서를 바꿨을 때 문자열이 같아진다면 1을 반환 아니라면 0 반환

 

>map으로 각 문자들을 key값으로 문자의개수를 value값으로 저장하고 다른 문자열과 같은지 비교  

public int solution(String before, String after) {

Map<Character,Integer> map = new HashMap<Character, Integer>();

for (int i = 0; i < before.length(); i++) {

map.put(before.charAt(i), map.getOrDefault(before.charAt(i), 0)+1);

}

for (int i = 0; i < after.length(); i++) {

if(!(map.containsKey(after.charAt(i)))||map.size()==0) {

return 0;

}

if(map.get(after.charAt(i))==1) {

map.remove(after.charAt(i));

}else {

map.put(after.charAt(i), map.get(after.charAt(i))-1);

}

}

return 1;

}

map에넣은 데이터를 after의 char들을 키 값으로 remove하면서 비교하였다. 

 

>map을 before의 map, after의 map 2개를 만들어서 .equals 함수로 같은지 비교하는게 더 편하다.    

public int solution(String before, String after) {

Map<Character,Integer> map = new HashMap<Character, Integer>();

Map<Character,Integer> map2 = new HashMap<Character, Integer>();

for (int i = 0; i < before.length(); i++) {

map.put(before.charAt(i), map.getOrDefault(before.charAt(i), 0)+1);

}

for (int i = 0; i < after.length(); i++) {

map2.put(after.charAt(i), map2.getOrDefault(after.charAt(i), 0)+1);

}

if(map.equals(map2))

return 1;

else return 0;

}

다른사람의 풀이 중 생각지 못한 방법을 발견했다. 

> 두 문자열을 정렬하여 같은지 비교하면 된다.

public int solution3(String before, String after) {

char[] arr = before.toCharArray();

char[] arr2 = after.toCharArray();

Arrays.sort(arr);

Arrays.sort(arr2);

if(arr.equals(arr2))return 1;

return 0;

}

 

'Java > Coding Test' 카테고리의 다른 글

외계어 사전  (0) 2023.09.12
특이한 정렬 문제풀이  (1) 2023.09.12
팩토리얼  (0) 2023.09.11
숫자 찾기 문제풀이  (0) 2023.09.10
피자 나눠먹기(2) 문제풀이 (with.유클리드 호제법)  (0) 2023.09.10
728x90

 정수 n이 주어질 때  i!<=n 을 만족하는 가장 큰 정수 i를 반환 

 

>1부터 i까지 1씩 증가하는 수를 곱해가며 n과 비교하여 i를 구한다. 

public int solution(int n) {

if (n == 0)

return 0;

int answer = 1;

int f = 1;

/*-*/

return factorial(n, answer, f);

}

 

public int factorial(int n, int answer, int f) {

f *= answer;

if (n < f) {

return answer - 1;

} else if (n == f)

return answer;

return factorial(n, answer + 1, f);

}

f= answer! 

> f는answer의 팩토리얼값

f와 n을 비교하여  n과 같으면 answer반환, n 보다 크면 answer-1 반환

f가 n보다 작으면 answer를 1 증가시켜 다시 반복한다.  

 

>while문으로 표현

public int solution2(int n) {

int answer = 1;

int m = 1;

while (true) {

m = m * answer;

if (m < n) {

answer++;

} else if (m == n) {

return answer;

} else if (m > n) {

return answer - 1;

}

}

}

m ==answer!;

m 이 n보다 작으면 answer를 증가시키고 다시 반복한다. 

728x90

주어진 숫자에서 특정값이 첫번째로 나오는 인덱스 반환, 특정 값이 없다면 -1 반환

public int solution(int num, int k) {

int answer = -1;

char[] arr = (num+"").toCharArray();

for (int i = 0; i < arr.length; i++) {

if(arr[i]==k+'0') {

return 1+i;

}

}

return answer;

}

평소처럼 charArray로 하나하나 비교해서 k값을 만나면 그 인덱스를 반환하고 아니면 -1을 반환하게 했다. 

 

다른 사람의 풀이를 보다가 훨씬 간결한 방법을 찾았다... 

public int solution2(int num, int k) {

return ("-" + num).indexOf(k+"");

}

찾은 인덱스 값에 1을 더해주는 대신 "-"를 더하면서 동시에 문자열로 바꾸고

"k"가 있는 인덱스를 찾아 반환한다. 

 

여기서 -1을 반환해야하는 경우가 문젠데 

 

indexOf의 API를 찾아보면 

 

Returns the index within this string of the first occurrence of the specified substring.

The returned index is the smallest value k for which:

 this.startsWith(str, k)

If no such value of k exists, then -1 is returned.

 

존재하지 않을 때 -1을 반환해준단다... 

+ Recent posts