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이 나오는지 알려주시면 감사하겠습니다....
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; } } } 현재 백준에서 문제가 통과되지 않고 있는데 혹시 잘못된 부분이라도 있을까요?ㅠ
강의 영상마다 질문이 있으면 언제든 그리고 바로 질문 남겨주세요 ! 질문할 때 가장 정확하게 이해할 수 있습니다. 해당 영상과 관련된 질문들을 해주실 때 제가 가장 정확히 답변 드릴 수 있습니다! 취업 전반의 상담이나, "제 코드가 왜 틀렸는지 알려주세요"와 같이 광범위한 질문은, 질문자의 상황에 따라 답변이 달라질 수 있기 때문에, 정확한 답변을 드리기가 어렵습니다 :( 이런 분들을 위해서는 멘토링 항목으로 별도 제공하고 있으니, 다음 링크를 참고해주세요! 이 링크를 통해서는 본인의 코드가 왜 틀렸는지 모를 때 질문을 주셔도 좋고, 취업 전반(면접 준비, 자소서, CS 면접 등) 에 관련한 질문을 주시면 답변 드리겠습니다 :) "이 질문은 해도 되나?"라는 생각이 드신다면 우선 남겨주세요! 제가 답변 드리기 어려운 건 멘토링에 올려 달라고 재요청 드리겠습니다 :) 안녕하세요! 혹시 Main class에 static으로 변수를 선언하는 이유가 궁금합니다! 또한, 백준에서 public static void main 에 선언했을 때와 차이가 궁금합니다..!! 감사합니다
안녕하세요! 강의 넘 잘 듣고 있습니다. 하루만에 거의 다들었네요,,ㅋㅋ 질문이 있습니다 혹시 dfs를 호출할 때 이런 '-'나 '|' 같은게 나오면 매개변수로 '-' 나 '|' 를 추가해서 dfs함수에 넘겨도 되는건가요? 저는 이렇게 할 때가 많은데 이렇게 하지 않고 오히려 dfs 함수 안에서 해결해주는 게 더 간단한 것 같기도 해서요.. 보통은 어떻게 하시나요? 전 4방 탐색을 하면서 이렇게 풀었었네요,, 한 방향만 탐색하는 팁 배워갑니다 ㅎㅎ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int[] dr = {-1, 1, 0, 0}; static int[] dc = {0, 0, -1, 1}; static int N, M; static char[][] arr; static int ans; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); arr = new char[N+2][M+2]; for (int i = 1; i <= N; i++) { String str = br.readLine(); for (int j = 1; j <= M; j++) { arr[i][j] = str.charAt(j-1); } } for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { if (arr[i][j] == '|') { dfs(i, j, '|'); ans++; } else if (arr[i][j] == '-'){ dfs(i, j, '-'); ans++; } } } System.out.println(ans); } private static void dfs(int r, int c, char shape) { int start = 0; int end = 0; if (shape == '|') { start = 0; end = 1; } else if (shape == '-'){ start = 2; end = 3; } arr[r][c] = '1'; for (int d = start; d <= end; d++) { int nr = r + dr[d]; int nc = c + dc[d]; if(arr[nr][nc] == shape) { arr[nr][nc] = '1'; dfs(nr, nc, shape); } } } }
class Solution(object): def twoSum(self, nums=[3,3], target=6): ans = [] dict = {} for i,v in enumerate(nums): if target-v in dict: ans.append(prev) ans.append(i) return ans dict[v] = i prev = i 이렇게하면, for문 안에서 리스트를 append하는거니까 총 O(n) 하는거아닌가요? 왜 예시 테스트케이스는 통과를 했는데 리트코드에서 submit을 누르면 나머지 테스트케이스는 통과하지 못하는거죠 ㅜㅜ
안녕하세요. 정수론 2로 몇번 나눠질까(#1407) 부분을 수강 하면서 궁금한 점을 질문드립니다. 해당 문제를 접근할 때 팩토리얼로 푸시는 것을 볼 수있었습니다. 해당 문제 자체에는 팩토리얼에 대한 설명은 없었는데, 어떻게 팩토리얼을 떠올릴 수 있으셨는지 궁금합니다. 해당 문제와 비슷하게 출제가 되었을 때 접근 방법이 궁금합니다. #2247도 같은 카테고리로 넣어두셔서 같은 접근 방법인가 싶은데, 해당 문제도 접근법이 궁금합니다. (어떤 단어나 부분에서 이 문제는 이렇게 풀어야겠다고 느끼시는 건지 궁금합니다.)
안녕하세요! 백준 1816번 암호 키 문제에 관한 질문이 있는데요 우선 제가 초급자라서 허접한 질문이어도 양해부탁드립니다. for-loop이 100만째 되는 시점에 "YES"를 print 하는건 이해가 되는데요. 제가 아래 두번째 코드에 적은 것처럼 어차피 100만에서 for-loop이 종료되니까 print("YES")를 해주면 된다고 생각했는데 백준에 두번째 코드를 제출해보니까 틀린 답이라고 나오더라구요. 혼자 고민을 해보았는데 결론이 나오질 않아서 질문드립니다. 강의에서 보여주신 것처럼 첫번째 코드에서 i == 100만이라는 조건을 붙여줘야 하는 이유가 무엇일까요?? 감사합니다. n = int(input()) for _ in range(n): tc = int(input()) for i in range(2, 1_000_001): if tc % i == 0: print("NO") break if i == 1_000_000: print("YES") #---------------------------------- n = int(input()) for _ in range(n): tc = int(input()) for i in range(2, 1_000_001): if tc % i == 0: print("NO") break print("YES")