N, X = map(int,input().split()) arr = sorted(list(map(int,input().split()))) s = 0 e = N-1 remain = 0 cnt = 0 while s <= e : # s와 e가 교차되면 멈춘다! if arr[e] == X: cnt += 1 e -= 1 continue if s == e : remain += 1 break # 짜투리를 하나 추가한다! if arr[e] + arr[s] >= X/2: cnt +=1 s += 1 e -= 1 else: s += 1 # 수가 커지겠죠! remain += 1 print(cnt + remain//3 ) 여기에서 while문 안에 첫 번째 if 다음에 continue가 들어가는 이유와 두 번째 if 문에서 break을 사용하는 이유를 모르겠습니다. 두 개 다 없어도 가능하다고 생각하는데 테스트 케이스의 경우 continue는 없어도 예제 출력을 출력했고, break은 없으면 예제출력과 결과가 다르네요!! continue와 break이 어떻게 쓰인 것인지 조금 자세히 설명해주실 수 있으실까요
21분 22초에서 176에서 177까지의 수에서 2의 제곱수로 나누어지는 약수를 모두 찾아 더하는 문제인데요. 뜬금없게 느껴졌는데, 176은 16으로 나누어 떨어지고, 177은 1로 나누어 떨어지니 16+1 =17이 답이다 라고 하셨는데... 저는 이 전개가 전혀 이해가 되지 않습니다... 어떻게 16 + 1이 나오는지 알려주시면 감사하겠습니다....
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님, http://boj.kr/a982837cbe674880af718ecd4566f9f5 이렇게 풀었는데, 예제는 다 맞게 나오는데 혹시 제가 놓친 테스트케이스가 있을까요? 아니면 다른 부분이 틀렸을까요? 감사합니다.
package baekjoon; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class p12891_DNA비밀번호 { static int[] myArr ; static int[] checkArr ; static int checkSecret ; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System. in )); StringTokenizer st = new StringTokenizer(br.readLine()); int s = Integer. parseInt (st.nextToken()); int p = Integer. parseInt (st.nextToken()); int result = 0; checkArr = new int[4]; // 비밀번호 체크 배열 myArr = new int[4]; // 현재 상태 배열 char[] a = new char[s]; checkSecret = 0; // 현재 p개 중 몇개가 비밀번호 요건에 만족하는지 a = br.readLine().toCharArray(); st = new StringTokenizer(br.readLine()); for (int i = 0; i < 4; i++) { checkArr [i] = Integer. parseInt (st.nextToken()); if ( checkArr [i] == 0) { checkSecret ++; // i번째 값은 이미 완성됨. } } for (int i = 0; i < p; i++) { // 부분 문자열 처음 받을 때 세팅 Add (a[i]); // 현재 상태 배열에 담음 } if ( checkSecret == 4) { result++; } // 슬라이딩 윈도우 for (int i = p; i < s; i++) { int j = i - p; // j = 맨 왼쪽, i = 맨 오른쪽 Add (a[i]); // 오른쪽에 있는 값 추가 Remove (a[j]); if ( checkSecret == 4) { result++; } } System. out .println(result); br.close(); } private static void Remove(char c) { switch (c) { case 'A': if ( myArr [0] == checkArr [0]) // 같으면 이번에 빠짐으로써 충족이 안 되는 것이니까 checkSecret 하나 줄임 checkSecret --; myArr [0]--; break; case 'C': if ( myArr [1] == checkArr [1]) checkSecret --; myArr [1]--; break; case 'G': if ( myArr [2] == checkArr [2]) checkSecret --; myArr [2]--; break; case 'T': if ( myArr [3] == checkArr [3]) checkSecret --; myArr [3]--; break; } } private static void Add(char c) { switch (c) { case 'A': myArr [0]++; if ( myArr [0] == checkArr [0]) checkSecret ++; // 'A'가 더 많이 들어온다고 해서 checkSecret값을 올리면 되는 게 아니므로 딱 같을 때에만 증가시킴 break; case 'C': myArr [1]++; if ( myArr [1] == checkArr [1]) checkSecret ++; break; case 'G': myArr [2]++; if ( myArr [2] == checkArr [2]) checkSecret ++; break; case 'T': myArr [3]++; if ( myArr [3] == checkArr [3]) checkSecret ++; break; } } } 현재 백준에서 문제가 통과되지 않고 있는데 혹시 잘못된 부분이라도 있을까요?ㅠ
http://boj.kr/21fd549ee17c48b9be877802112b7a91 if문에서 next > MAX라고 하면 틀리네요 next >= MAX라고 하면 맞구요 왜 그런걸까요 그리고 v.push_back(i) 할 때 1, 2, 3 이렇게 넣으면 1 , 2, 3 순서대로 들어가는게 아니라 3, 2, 1 이렇게 되네요 처음 알았습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 이중 포문 사용하면 O(N제곱) 나올 것 같아서 조건문에서 ++해주는 방법으로 사용했는데도 시간초과가 나오는 이유가 뭘까요? import java.util.Scanner; // 이중 포문을 피해서 로직을 만들었는데도 시간초과 발생 public class Main { public int solution(int n, int m, int[] arr) { int answer = 0; int start = 0; int sum = arr[start]; for (int i = start+1; i < n; i++) { sum += arr[i]; if (sum == m) { answer++; start ++; i = start; sum = arr[start]; } if (i == n-1) { start ++; // 1 i = start; //2 sum = arr[start]; } } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int m = kb.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = kb.nextInt(); } System.out.println(T.solution(n,m,arr)); } }
fire_check[ny][nx]!=INF면 continue잖아요 ny nx에 값(!INF인값)이 이미 존재하는데 불이 여러개라 fire_check[ny][nx]>fire_check[y][x]+1 인 경우의수는 생길 수 있는데 bfs라 이럴 경우가 안생겨서 굳이 비교 할 필요 없게되나요? 질문이 좀 그런가요 ㅠㅠ