안녕하세요 강사님. 궁금한게 있습니다. 처음에 이 문제를 풀려고 했을 때, 조합을 떠올렸었습니다. 모든 육지에서 두 육지를 골라서 특정 한 육지에서 다른 육지까지의 최단거리를 구하는 느낌으로요. 그리고 최단 거리의 최댓값을 계속 갱신하는 느낌으로 생각했습니다. 시간 초과가 발생할 거 같다고 생각했고, 실제로 시간 초과가 발생했습니다. 그 이유로 최악의 시간복잡도가 2500C2 * 2500 이어서 그럴까요?
안녕하세요 강사님 배열 합치기 문제에서 제가 먼저 풀었을때는 아래와 같이 풀어서 accept가 떴긴 했는데 강사님이 강의해주신 코드와 제 코드 시간 비교를 해보니 10ms 정도 차이가 나더라고요 (제 코드가 조금 더 running time이 깁니다.) 혹시 아래 코드를 코딩테스트에서 사용해도 딱히 무방한가요??? - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. import java.util.*; public class Main { public ArrayList<Integer> solution(int n, int[] arr1, int m, int[] arr2) { ArrayList<Integer> answer = new ArrayList<>(); for (int x : arr1) answer.add(x); for (int x : arr2) answer.add(x); Collections.sort(answer); return answer; } public static void main(String[] args) { Main T = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int[] arr1 = new int[n]; for (int i = 0; i < n; i++) { arr1[i] = kb.nextInt(); } int m = kb.nextInt(); int[] arr2 = new int[m]; for (int i = 0; i < m; i++) { arr2[i] = kb.nextInt(); } for (int x : T.solution(n, arr1, m, arr2)) { System.out.print(x + " "); } } }
from collections import deque List = [] List = deque(List) List2 = [] while(True): x = int(input()) if x != 0 and x != -1: m = 0 n = len(List) -1 answer = len(List) if List: while(m <=n): if x <= List[(m+n)//2]: answer = (m+n)//2 n = (m+n)//2 -1 else: m = (m+n)//2 + 1 List.insert(answer, x) else: List.append(x) elif x == 0: if len(List) == 0: List.append(-1) else: List2.append(List.popleft()) else: break for _ in List2: print(_) 정답 출력을 위해 List2 로 정답들을 담았고 pop 시간을 줄이기 위해 deque를 썼습니다. 이렇게 풀어도 괜찮을까요?
안녕하세요 강의 주행 오늘 시작한 대학생입니다. 아무리 코드를 수정하고 컴파일해도 AA.exe 실행 결과값이 그대로이고 채점도 오류가 나서 알아보다가 결국 제가 default application 으로 파일을 열고 거기서 코드를 수정했다는게 것이 잘못인걸 깨달았습니다. dev c++에서 main.cpp 파일에서 우클릭->open with -> default application. 이렇게 열면 main.exe 가 AA파일에 생성된걸 확인할 수 있었는데 이렇게 여는 기능은 언제 쓰이는지 궁굼합니다.
http://boj.kr/cd6fbe132cfd4b3dbe5e0c746db37b16 실수로 공유를 안눌렀네요 ㅎㅎ.. 질문했던 글 복붙해서 다시 올리겠습니다! ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 제가 찾아본 모든 반례 체크 다 통과했습니다. 아무래도 사전순 판단하는 로직때문에 틀린 것 같긴한데,, ans 배열과 sel 배열을 비교해서 ans의 요소가 더 크면 break를 해주고 sel의 값으로 바꿔 주었는데 반례가 딱히 떠오르지 않으니까 답답합니다..
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/594b7963c3a048d9bd78bb21f1fe88a4 강사님 코드에서 for(auto i : v) 이것 말고는 동일한 것 같은데, 왜 오답일까요..??
안녕하세요. 아래 코드블럭은 다른 풀이로 푼 코드인데, 이건 통과가 됩니다. 근데 문제는 첨부한 링크의 코드는 왜 통과가 안되는지 모르겠습니다 ㅠㅠ 나름의(?) 성능향상 빼고는 동일한 코드라고 생각이 드는데 뭐가 문제일까요? 통과 #include <bits/stdc++.h> using namespace std; string s; int ret = 1; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> s; for (int i = 0; i < s.size() / 2; i++) { if (s[s.size() - 1 - i] == s[i]) { ret = 1; } else { ret = 0; break; } } cout << ret << '\n'; return 0; } 에러 http://boj.kr/91c918183ef8436187679d76a3e38c96 p.s. 백준에서는 s.size()의 타입 관련한 에러라고 뜨는데… 그게 문제라면 둘다 에러가 나야하는거 아닌가 해서요. (vscode에서 컴파일 에러는 안뜹니다.) 항상 감사합니다.
https://www.acmicpc.net/source/54677521 모든 반례 체크 다 통과했습니다. 아무래도 사전순 판단하는 로직때문에 틀린 것 같긴한데,, ans 배열과 sel 배열을 비교해서 ans의 요소가 더 크면 break를 해주고 sel의 값으로 바꿔 주었는데 반례가 딱히 떠오르지 않으니까 답답합니다..
강의를 보기 전에 혼자 고민하고 작성했던 코드입니다. 출력은 잘 나오는데 채점 사이트에서 런타임 에러가 떴는데, 런타임 에러 어떤 상황에서 나오는지 궁금합니다! import java.util.*; public class Main { public int solution(int n, int[][] arr2) { int answer = 0; int sum = 0; // 각 행의 합 for (int i = 0; i < n; i++) { sum = 0; for (int j = 0; j < n; j++) { sum += arr2[i][j]; } answer = Math.max(sum, answer); } // 각 열의 합 for (int i = 0; i < n; i++) { sum = 0; for (int j = 0; j < n; j++) { sum += arr2[j][i]; } answer = Math.max(sum, answer); } // 두 대각선의 합 // 00 -> 11 -> 22 -> 33 -> 44 // 04 -> 13 -> 22 -> 31 -> 40 sum = 0; for (int i = 0; i < n; i++) { sum += arr2[i][i]; } answer = Math.max(sum, answer); sum = 0; for (int i = 0; i < n; i++) { sum += arr2[i][n-i-1]; } answer = Math.max(sum, answer); return answer; } public static void main(String[] args) { Main T = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int[][] arr = new int[5][5]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { arr[i][j] = kb.nextInt(); } } System.out.println(T.solution(n, arr)); } }
define CRT SECURE_NO_WARNINGS #include <iostream> #include <vector> #include <algorithm> #include <queue> #include <tuple> #include <string> #include <map> #include <stack> using namespace std; vector<int> adj[100001]; int visited[100001]; int n, m, cnt, ret = 1; int a, b; void dfs(int node) { visited[node] = 1; for (int i = 0; i < adj[node].size(); i++) { if (!visited[adj[node][i]]) { cnt++; dfs(adj[node][i]); } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> m; for (int i = 0; i < m; i++) { cin >> a >> b; adj[b].push_back(a); } for (int i = 1; i <= n; i++) { fill(&visited[0], &visited[0] + 100001, 0); cnt = 0; dfs(i); ret = max(ret, cnt); } for (int i = 1; i <= n; i++) { fill(&visited[0], &visited[0] + 100001, 0); cnt = 0; dfs(i); if (cnt == ret) cout << i << " "; } return 0; } 다음과 같이 코드를 작성하였는데 계속 시간초과가 뜨고 인접행렬로 풀면 메모리 초과가 나서 변경하였는데 추가로 어떻게 수정해야될지 모르겠습니다 ㅠㅠㅠ visual studio에서는 cnt출력 및 i 를 출력했을 때 결과는 맞게 나옵니다
http://boj.kr/ebc33dce3e394b7099e34b3f523cb5f1 안녕하세요 강사님. 예전에 메일로 다른 언어로 코딩 테스트 준비한다 했던 학생입니다. 저는 연구소 문제를 풀 때, 따로 virusList, wallList를 만들지 않았습니다. 이러한 문제를 풀 때, 이렇게 따로 값을 저장하는 배열을 만들어야 할까요?
안녕하세요 큰돌님 강의 잘 보고 있습니다!!! 이번 문제에서 큰돌님께서는 #define으로 max_n을 지정해 hi 값에 대입하여 푸셨는데 저는 hi값을 그냥 1e18로 잡아서 풀어서 실패했습니다. 그 이유를 알 수 있을까요? 입력한 코드 공유합니다. 실패 코드 http://boj.kr/6a95263b74234ed781efcb7fa7ee663a
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/116963f4a7af4f4ab1d334adfa0b39cc 위의 코드는 제가 작성한 코드입니다..
import sys from collections import deque sys.stdin = open("input.txt", 'r') e = input() n = int(input()) for i in range(1,n+1): cur = deque(input()) cnt = 0 idx = 0 while cur and idx <len(e): cur_pop = cur.popleft() if cur_pop == e[idx]: cnt += 1 idx += 1 if cnt == len(e): print("#%d YES" %i) else: print("#%d NO" %i) 이렇게 코드 작성했더니 다른 case에 대해서는 다 맞지만 case2에 대해서 틀린 답이 나옵니다. 어디가 잘못된 걸까요?