inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

스택이 멀티쓰레드에 안전하지 않은걸까요?

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 잘 듣고 있습니다. 문제와 관련 없긴 한데, 궁금해서 질문 드립니다. 동일한 코드의 메서드 solution1, solution2를 main 메서드에서 순차적으로 실행했을 때 결과값이 다른데, 스택이 멀티쓰레드에 안전하지 않아서 발생하는 문제일까요? 하나씩 실행하면 올바른 정답이 나옵니다. package 스택; import java.util.Scanner; import java.util.Stack; public class _03_크레인인형뽑기 { public int solution1(int[][] board, int[] moves) { int answer = 0; Stack<Integer> stack = new Stack<>(); for (int pos : moves) { for (int i = 0; i < board.length; i++) { if (board[i][pos - 1] != 0) { int tmp = board[i][pos - 1]; board[i][pos - 1] = 0; if (!stack.isEmpty() && (stack.peek() == tmp)) { stack.pop(); answer += 2; } else { stack.push(tmp); } break; } } } return answer; } public int solution2(int[][] board, int[] moves) { int answer = 0; Stack<Integer> stack = new Stack<>(); // 1. 크레인 위치에 해당하는 인형을 찾는다. (밑으로 행을 이동하면서 인형 찾기) for (int pos : moves) { for (int i = 0; i < board.length; i++) { // 2. 비어 있지 않은 인형 캐치 (배열의 index는 0부터 시작하기 때문에 -1) if (board[i][pos - 1] != 0) { // 인형 꺼냄 int tmp = board[i][pos - 1]; // board의 인형은 비어줌 board[i][pos - 1] = 0; // 바구니에 겹치는게 있으면 모두 꺼냄 if (!stack.isEmpty() && (stack.peek() == tmp)) { stack.pop(); answer += 2; } else { // 아니면 바구니에 인형 담기 stack.push(tmp); } // 다음 위치로 이동 break; } } } return answer; } public static void main(String[] args) { _03_크레인인형뽑기 t = new _03_크레인인형뽑기(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] board = new int[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { board[i][j] = sc.nextInt(); } } int m = sc.nextInt(); int[] moves = new int[m]; for (int i = 0; i < m; i++) { moves[i] = sc.nextInt(); } System.out.println("1번 : " + t.solution1(board, moves)); System.out.println("2번 : " + t.solution2(board, moves)); } } 결과값 5 0 0 0 0 0 0 0 1 0 3 0 2 5 0 1 4 2 4 4 2 3 5 1 3 1 8 1 5 3 5 1 2 1 4 1번 : 4 2번 : 0

  • java
  • 코딩-테스트
하얀종이개발자 댓글 1 좋아요 0 조회수 369

2-I 맞왜틀 질문있습니다!

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

http://boj.kr/b4b633fb25634805a58a4d335d3e209b 제가 작성한 코드입니다. 해설에있는 방법과는 다르게 코드를 짰지만 제가 작성한코드도 예제 입력시 모두 정답이 나오는데 제출을 하면 틀렸다고 합니다. 반례를 찾으려고 오래 붙잡고있었는데 도저히 생각이 안나요ㅜㅜ 도와주세요!! 항상 강의와 유튜브 잘 보고 있습니다! 감사합니다!

  • c++
  • 코딩-테스트
이용문 댓글 1 좋아요 0 조회수 200

섹션 9. 미로탐색(BFS)(질문)

해결됨

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

선생님 안녕하세요 ~ 미로탐색(DFS) 문제를 BFS로 풀어보고 싶은데 어떻게 풀어줘야 문제가 해결 될까요?? 지나온 길을 체크한 후 BFS에서는 체크를 어떻게 풀어줘야할지 모르겠습니다.. function solution(arr) { let answer = 0; let n = arr.length - 1; let nx = [-1, 0, 1, 0]; let ny = [0, 1, 0, -1]; let queue = []; queue.push([0, 0]); while (queue.length) { let [x, y] = queue.shift(); for (let k = 0; k < 4; k++) { let dx = x + nx[k]; let dy = y + ny[k]; if (dx === n && dy === n) answer++; if (dx >= 0 && dx <= n && dy >= 0 && dy <= n && arr[dx][dy] === 0) { arr[x][y] = 1; queue.push([dx, dy]); } } } return answer; }

  • javascript
  • 코딩-테스트
ReKoding 댓글 1 좋아요 1 조회수 241

라이브러리를 활용해서 문제풀이

해결됨

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

안녕하세요 선생님! 프로그래머스에서 코딩 기초 트레이닝 0단계를 모두 풀고나서 수강 중인 학생입니다. 제가 문제를 풀고나서 강의를 보고 코드를 비교하면서 리뷰도 진행하면서 느낀 의문이 있습니다. 저는 프로그래머스에서 algorithm과 같은 라이브러리를 활용해서 문제를 많이 풀었는데 선생님 강의에서는 그 라이브러리의 원리를 풀어서 푸는 문제가 많더라구요! 모든 코딩에는 정답이 없겠지만 코딩테스트에서 활용해도 무방한지 궁금합니다 ㅎㅎ

  • c++
  • 코딩-테스트
결국네오플붙음 댓글 1 좋아요 0 조회수 350

2-6)런타임에러 질문입니다.

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class Main { public String solution(String[] arr) { String answer= ""; ArrayList<Integer> newlist = new ArrayList<>(); for(int i=0; i<arr.length; i++) { StringBuffer sb = new StringBuffer(arr[i]); newlist.add(Integer.parseInt(sb.reverse().toString())); } for(int i=0; i<newlist.size(); i++) { if((int)newlist.get(i)==1) { newlist.remove(i); } } for(int i=0; i<newlist.size(); i++) { for(int j=2; j<newlist.get(i); j++) { if(newlist.get(i)%j==0) { newlist.remove(i); } } } for(int i=0; i<newlist.size(); i++) { answer += newlist.get(i)+ " "; } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner kb=new Scanner(System.in); int N = kb.nextInt(); String[] arr = new String[N]; for(int i=0; i<N; i++) { arr[i] = kb.next(); } System.out.println(T.solution(arr)); return ; } } 맨 처음에 string[]배열로 입력값을 받은후 stringbuffer을 이용해서 뒤집고, Integer.parseInt하면 0이 제거 되는 숫자화가 됩니다. 그 이후에 arraylist에 순서대로 담아서, 소수가 아니면 제거하는 방식으로 풀었는데 런타임에러가 나는 이유를 모르겠습니다.

  • java
  • 코딩-테스트
김민지열심히해 댓글 1 좋아요 0 조회수 230

2-R 테스트 케이스 질문있습니다

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하십니까 큰돌님 강의 보기 전에 코드 작성했는데 저는 지울 노드가 주워졌을 때 진짜 없애는 코드를 작성했었는데 틀렸더라구요. 어디가 틀렸을까요 ?? http://boj.kr/7a0241561d4f4fcc9c6a10d8f190da42 +커뮤니티에서 반례를 찾았습니다 2 1 -1 1 답 : 0 / 제 코드 : 1 추가로 궁금한게 저 반례의 경우 그림이 어떻게 되는 건지 모르겠습니다 + 그리고 다른 질문 중에서 ""트리가(루트노드가) 단 하나만 존재해야 하는데 문제에서는 트리가 반드시 하나만 존재한다는 설명이 안보인다 3 -1 -1 -1 1 답 : 2"" 라는 질문이 있는데 만약에 저렇게 주어졌을 때 저는 답이 3이라고 생각하는데 2인 건가요 ?? 저 상황에서의 그림 또한 궁금합니다

  • c++
  • 코딩-테스트
대기업목표 댓글 1 좋아요 0 조회수 270

디스코드 초대장이 만료되었다고 합니다.

미해결

코딩테스트 [ ALL IN ONE ]

디스코드 방이 안들어가집니다. 링크를 타고 들어가면 초대장이 만료되었다고 나와요

  • python
  • 코딩-테스트
  • 알고리즘
으침 댓글 2 좋아요 1 조회수 1016

32 선택정렬관련 질문

미해결

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

#include <iostream> using namespace std; int main(){ freopen("input.txt","rt",stdin); int a[100],n,i,j,tmp=0; cin>>n; for(i=0;i<n;i++){ cin>>a[i]; } for(i=0;i<n-1;i++){ for(j=i+1;j<n;j++){ if(a[i]<a[j]){ tmp=a[i]; a[i]=a[j]; a[j]=tmp; } } } for(i=0;i<n;i++){ cout<<a[i]; } return 0; } 선생님, 선택정렬 짤 떄 혹시 이렇게 해도 상관없는건가요...?

  • c++
  • 코딩-테스트
dongdong 댓글 1 좋아요 0 조회수 288

알파코드 질문드립니다.

미해결

자바 코딩테스트 - it 대기업 유제

이렇게 작성하니까 오류가 나는데 뭐가 잘못된건지 모르겠습니다. import java.util.*; import javax.security.auth.Subject; import java.awt.List; import java.io.*; class Main { public static int[]dy; public int solution(String s){ int answer = 0; dy = new int[101]; answer = dfs(0,s); return answer; } public static int dfs(int s, String str) { if(dy[s]>0) return dy[s]; if(str.charAt(s)=='0' && s<str.length()) return 0; if(s==str.length() || s==str.length()-1) return 1; else { int res = dfs(s+1, str); int num = Integer.parseInt(str.substring(s,s+2)); if(num<=26) res+=dfs(s+2, str); return dy[s] = res; } } public static void main(String[] args){ Main T = new Main(); System.out.println(T.solution("25114")); System.out.println(T.solution("23251232")); System.out.println(T.solution("21020132")); System.out.println(T.solution("21350")); System.out.println(T.solution("120225")); System.out.println(T.solution("232012521")); } }

  • java
  • 코딩-테스트
vkfksaosldk 댓글 2 좋아요 0 조회수 348

3-I 문제 질문

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 선생님 좋은강의 감사합니다. 강의를 보고 코드를 작성하던중에 질문이 생겼습니다. 강의속 코드에서 turn = 1로 초기화 하고 b 에다가 turn을 더하는 방식으로 코드를 작성하셨는데 turn = 0 으로 초기화 하고, 이에 맞게 코드를 재작성하니 원하는 답이 나오지 않아서 질문 드립니다. 우선 테스트케이트 17, 5 를 입력했을때 4가 아니라 6이 나와서 애초에 틀렸기 때문에 코드를 백준에 제출하지 않았습니다. 따라서 링크가 아닌 질문에 제가 작성한 코드를 첨부하겠습니다. #include <bits/stdc++.h> using namespace std; int N, K, visited[2][500005]; bool flag; int bfs(int N, int K) { int turn = 1; queue<int> q; q.push(N); visited[0][N] = 1; while (q.size()) { K += turn; if (K >= 500001) return -1; if (visited[turn % 2][K]) { flag = 1; return turn; } int qsize = q.size(); for (int i = 0; i < qsize; i++) { int here = q.front(); q.pop(); if (here == K) { flag = 1; return turn; } for (int there : {here + 1, here - 1, here * 2}) { if (there < 0 || there >= 500001) continue; if (visited[turn % 2][there]) continue; visited[turn % 2][there] = visited[(turn + 1) % 2][here] + 1; q.push(there); } } turn++; } return -1; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N >> K; int res = bfs(N, K); if (flag) cout << res << '\n'; else cout << - 1 << '\n'; return 0; }

  • c++
  • 코딩-테스트
이명운 댓글 1 좋아요 0 조회수 364

2-b

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

http://boj.kr/d58a57ff06f142f78078414e20b7da0a 이것저것 바꿔보는중인데 답은 맞게나오는데 통과가안되네요

  • c++
  • 코딩-테스트
ㅎㅅ 댓글 1 좋아요 0 조회수 307

Object 클래스의 clone() 메서드 질문

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

Object 클래스의 clone() 메서드는 깊은 복사가 아니라 얕은 복사로 알고 있습니다. 강의에서의 선생님의 말씀대로 clone() 메서드는 깊은 복사가 맞나요?

  • java
  • 코딩-테스트
재영 댓글 2 좋아요 0 조회수 364

IP주소 질문드립니다.

미해결

자바 코딩테스트 - it 대기업 유제

코드에서 if(Integer.parseInt(num) > 255) return; 이 부분이 일종의 메모이제이션 역할을 하니까 알파코드 문제처럼 따로 배열을 잡아서 방문처리를 안하는건가요???

  • java
  • 코딩-테스트
vkfksaosldk 댓글 2 좋아요 0 조회수 243

[질문] 유기농 배추 map 정보 반영 건

해결됨

[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편

안녕하세요, 강의 잘 듣고 있습니다. map 정보 반영에서 map[y+1][x+1] = true; 라고 하셨는데, map[x+1][y+1]도 true값을 넣어야 하지 않을까요? 빠른 답변 부탁합니다. 감사합니다.

  • java
  • 코딩-테스트
  • 알고리즘
  • dfs
현상원 댓글 1 좋아요 1 조회수 291

2-H 질문

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

http://boj.kr/b99b5a5fdbd244e797ca23eca42b1662 *설명은 주석해놓았습니다. 강의를 듣기 전에 먼저 짜본 코드인데 모든 입력 값에 대해서 is not acceptable만 출력되는 오류가 발생하는 코드입니다. 큰돌님 코드랑 비교했을 때 전체적인 로직은 다를 바가 없다고 보이는데, 어디가 잘못된건지 짚어주시면 감사하겠습니다.ㅠ

  • c++
  • 코딩-테스트
moveityourself01 댓글 1 좋아요 0 조회수 244

알파코드 질문드립니다.

미해결

자바 코딩테스트 - it 대기업 유제

import java.util.*; import javax.security.auth.Subject; import java.awt.List; import java.io.*; class Main { public static int[] dy; public int solution(String s){ int answer = 0; dy = new int[101]; answer = dfs(0,s); return answer; } public static int dfs(int s, String str) { if(dy[s]>0) return dy[s]; //메모이제이션 //if(s<str.length() && str.charAt(s)=='0') return 0; if(s==str.length() || s==str.length()-1) return 1; if(s<str.length() && str.charAt(s)=='0') return 0; else { int res = dfs(s+1, str); int num = Integer.parseInt(str.substring(s, s+2)); if(num<=26) res+=dfs(s+2, str); return dy[s] = res; } } public static void main(String[] args){ Main T = new Main(); System.out.println(T.solution("25114")); System.out.println(T.solution("23251232")); System.out.println(T.solution("21020132")); System.out.println(T.solution("21350")); System.out.println(T.solution("120225")); System.out.println(T.solution("232012521")); } } if(s<str.length() && str.charAt(s)=='0') return 0; 이 구문을 if(s==str.length() || s==str.length()-1) return 1; 위 아래에 배치하는 순서에 따라 답이 다르던데 왜 그런거죠???

  • java
  • 코딩-테스트
vkfksaosldk 댓글 1 좋아요 0 조회수 265

Scanner next() 메소드 관련 질문입니다.

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 1) int n = kb.nextInt(); String str = kb.nextLine(); ============================== 2) int n = kb.nextInt(); String str = kb.next (); 1)과 2) 차이점이 궁금합니다. 예를들어 5 \r\n 3 을 입력하는 경우, 1)의 경우에는 콘솔창에 엔터를 치면 입력이 안되고, 2)의 경우에는 엔터를 쳐서 따로 입력이 가능한데 왜 그런지 궁금합니다ㅠㅠ

  • java
  • 코딩-테스트
김민지열심히해 댓글 1 좋아요 0 조회수 335

좌표평면질문

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

성역에서 시간을 보내다보니 2주째 손을 놓아버렸네요 다시빡공갑니다 좌표탐색할때 좌표평면이 저희가 평소알던게아니라 y가 뒤집어져있어서 헷갈리는데 const int dy[] = {-1,0,-,0}; const int dx[] = {0,1,0,-1}; 가 아니라 const int dy[] = {1,0,-1,0}; const int dx[] = {0,1,0,-1}; 으로해도 답은 맞게나오던데 상관없나요?

  • c++
  • 코딩-테스트
ㅎㅅ 댓글 1 좋아요 0 조회수 316

크레인 인형뽑기(카카오)에 대한 제 풀이 코드에 어떤 문제가 있는지 질문드립니다

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

다음과 같이 코드를 작성했는데, 테스트케이스 4, 5번이 틀린 것으로 나오네요. 제 코드에 어떤 문제가 있는지 이해가 되지 않아서 질문 드립니다. import java.util.*; import java.io.*; public class Main { public int solution(int[][] board, int[] moves) { int answer = 0; List<Integer> dollList = new ArrayList<>(); Stack<Integer> stack = new Stack<>(); for (int i = 0; i < moves.length; i++) { stack = new Stack<>(); for (int j = 0; j < board.length; j++) { if (board[j][moves[i] - 1] != 0) { stack.push(board[j][moves[i] - 1]); board[j][moves[i] - 1] = 0; break; } } if (stack.isEmpty()) { continue; } dollList.add(stack.pop()); // 바구니에 인형을 넣음 if (dollList.size() >= 2) { for (int j = 0; j < dollList.size() - 1; j++) { if (dollList.get(j) == dollList.get(j + 1)) { dollList.remove(dollList.get(j)); dollList.remove(dollList.get(j)); answer += 2; } } } } return answer; } public static void main(String[] args) throws IOException { Main main = new Main(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); int[][] board = new int[n][n]; for (int i = 0; i < n; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); for (int j = 0; j < n; j++) { board[i][j] = Integer.parseInt(st.nextToken()); } } int m = Integer.parseInt(br.readLine()); int[] moves = new int[m]; StringTokenizer st = new StringTokenizer(br.readLine()); for (int i = 0; i < m; i++) { moves[i] = Integer.parseInt(st.nextToken()); } System.out.println(main.solution(board, moves)); } }

  • java
  • 코딩-테스트
Chung OPTIMUS 댓글 1 좋아요 0 조회수 428

2-O 코드 질문있습니다

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하십니까 큰돌님 강의 보기 전에 문제를 풀어봤는데 조건문들이 좀 비효율적일까요 ?? http://boj.kr/523daf3c22924bf99a5f46b5a6a8fd96

  • c++
  • 코딩-테스트
대기업목표 댓글 1 좋아요 0 조회수 286

인기 태그

인프런 TOP Writers

주간 인기글