[Silver 4] DNA 비밀번호

devKyoun·2023년 5월 11일
0
post-thumbnail

문제출처

⚙️ Code

Sliding(이동) Window and Update Logic 사용

//슬라이딩 윈도우
for(int i=0, j=0; i<DNA_len; i++){

//슬라이딩 윈도우를 진행하기전 초기화 단계 (Update Logic)
	switch(DNA.charAt(i)){
		case 'A':
			check[0]++;
			break;
		case 'C':
			check[1]++;
			break;
		case 'G':
			check[2]++;
			break;
		case 'T':
			check[3]++;
			break;
		default:
			break;
	}
    

	//슬라이딩 윈도우 시작
	if(i >= sub_len-1){
		int cnt = 0;

		//check배열과 min 조건이 같은지
		for(int k=0; k<4; k++){
			if(min[k] <= check[k])
				cnt++;
		}

		//요구조건 만족시
		if(cnt == 4)
			result++;

		//슬라이딩 윈도우에 문자가 빠질때 (Update Logic)
		switch(DNA.charAt(j)){
              case 'A':
                  check[0]--;
                  break;
              case 'C':
                  check[1]--;
                  break;
              case 'G':
                  check[2]--;
                  break;
              case 'T':
                  check[3]--;
                  break;
              default:
                  break;
		}

		//부분 문자열의 길이를 지키기 위해
		j++;
		//for문에서 i++
	}
}

💡IDEA

슬라이딩 윈도우의 크기는 부분문자열의 길이와 같다.
그 부분 문자열의 길이가 되기 전까지 문제에 따른 조건들을 Update시켜주는게 가장 중요한 아이디어이다.

profile
Game Developer

0개의 댓글