분류 전체보기 51

[코딩연습_JAVA] 크레인 인형뽑기

*김태원님의 '자바 알고리즘 문제풀이 입문'으로 공부중이다. [간단 문제 설명] n*n 크기의 2차원 배열에 다양한 종류의 인형이 들어있다. 크레인으로 인형을 집어 1차원 배열에 넣는다. 이때 만약 같은 종류의 인형이 직접 맞닿으면 그 두 인형은 사라진다. 크레인이 모두 작동한 후 사라진 인형의 개수를 구하라. 내 솔루션 코드: public int solution(int n, int[][] board, int[] moves){ Stack stack= new Stack(); int answer=0; int y=0; //2차원 배열의 행을 나타냄 for(int x: moves){ while(y1 && stack.get(stack.size()-2)==stack.peek()){ stack.pop(); stack..

[코딩연습_JAVA] 괄호 문자 제거

[간단 문제 설명] 입력된 문자열에서, 소괄호 내에 있는 문자를 제거하고 남은 문자만 출력하도록 한다. 솔루션 코드는 아래와 같다. ↴ public String solution(String s){ Stack stack=new Stack(); char tmp=' '; for(char x: s.toCharArray()){ stack.push(x);//')'가 나올때까지 push한다. if(x==')'){ do{ tmp=stack.pop(); if(stack.isEmpty()) break; //문자열 첫 문자가 ')'일 경우. }while(tmp!='('); //'('가 나올때까지 pop. } } char[] carray=new char[stack.size()]; //stack 내(內) 문자를 저장할 배열 f..

[코딩연습_JAVA] 올바른 괄호

[간단 문제 설명] 괄호만으로 이루어진 문자열이 주어진다. 괄호의 쌍이 올바르게 위치하면 "YES"를 출력, 쌍이 올바르지 않으면 "NO"를 출력한다. 솔루션 코드는 아래와 같다. ↴ public String solution(String pth){ Stack checkP=new Stack(); for(char x:pth.toCharArray()){ if(x=='(')checkP.push(x); else if(checkP.isEmpty()||checkP.pop()!='(') return "NO"; //X==')'일 경우 실행되는 구문 } if(!checkP.isEmpty()) return "NO"; //짝지어지지 못하고 남는 괄호가 있는경우 return "YES"; } 이번같은 괄호 문제는 stack의 L..

[코딩연습_JAVA] K번째 큰 수

[간단 문제 설명] 1부터 100사이의 자연수가 적힌 N개의 카드(중복숫자 허용)에서 3장의 카드를 무작위로 골라 숫자를 더한다. 더한 숫자들 중 K번째로 큰 수를 출력한다. K번째 숫자가 없으면 -1을 반환한다. 자료의 중복을 허용하지 않으면서, value값은 필요 없고 key값만 있으면 되기 때문에 HashMap보다는 TreeSet을 활용하는 것이 좋다. public int solution(int n, int k, int[] arr){ TreeSet Tset=new TreeSet(Collections.reverseOrder()); //내림차순 정렬 for (int i=0; i

[코딩연습_JAVA] 학급 회장(Hash) (24.02.12)

최근 two pointers와 sliding window를 사용하여 시간복잡도를 줄이는 알고리즘 문제를 한창 풀다가 HashMap을 활용한 알고리즘 문제풀이로 넘어와서 공부중이다. Hash에 대한 개념 정리는 이미 책을 통해 한 번 훑었지만 추후에 글로 정리해보기로하고, 오늘은 알고리즘 문제들을 몇 개 풀면서 알게된 HashMap관련 메소드들을 차근차근 정리해보려고한다. [간단 문제 설명] 어떤 문자열에서 가장 많이 출현하는 문자가 무엇인지 출력하면 된다. 배열과 반복문을 사용해서도 풀 수 있겠지만, 해시를 사용하면 훨씬 간단하고 빠르게 문제를 해결할 수 있다. (HashTable은 데이터의 해시값을 테이블 내 주소로 활용하기 때문에 탐색에 있어서는 이진탐색보다도 강력하다고 할 수 있음) 아래는 솔루션 ..

[코딩연습_JAVA] 연속 부분수열

(김태원님의 알고리즘 문제풀이 강의(JAVA)를 들으며 공부중이다.) 공부하다가 '이건 꼭 새겨둬야지' 하는 사항이 있어 오랜만에 기록을 남긴다. (오답노트) 이미 잘하는 사람들에게는 시시한 사항이겠지만, 나는 한참 배우는 중이니까..! [문제 설명] 'N개의 수로 이루어진 수열에서, 합했을 때 특정 값이 나오는 부분 수열의 개수를 출력'하는 문제이다. 두 개의 포인터로 슬라이딩 윈도우를 구현하면 쉽게 풀 수 있는 문제다. 문제 풀이 아이디어 자체는 좋았는데, 간단한 부분에서 막혔다. 자꾸 부분 수열의 카운팅 개수가 정답보다 1적게 나오는 것. 무엇이 문제 였을까? 아래 잘못된 코드를 보자. #첫 번째 코드 public int solution(int n, int m, int[] arr){ int cnt=..

[코딩연습_JAVA] 봉우리

(*김태원님의 알고리즘 문제 풀이(JAVA)를 수강하면서 공부 중이다.) N*N격자에서 어떤 수와 그 수의 상하좌우에 있는 수를 비교했을때, 가운데 위치한 수가 제일 큰 경우가 몇 번인지 횟수를 세는 프로그램을 짜보았다. 아래는 강의를 보기 전 직접 구현한 코드의 일부이다. public int solution(int n, int[][] arr){ int cnt=0; //봉우리 개수를 세는 변수 선언 for(int i=1; i

[코딩연습_JAVA] 격자판 최대합 구하기

(김태원님의 알고리즘 문제풀이 강의(JAVA)를 들으며 공부중이다.) 격자판의 행,열,대각선 중 가장 큰 값을 출력하는 간단한 문제다. 아래는 강의를 듣기 전 본인이 직접 구현한 솔루션 코드의 일부이다. public int solution(int n, int[][] arr){ int answer = 0; int diagonal1Sum=0, diagonal2Sum=0; //대각선 값의 합을 저장하는 변수 for(int i=0; i

[C]문자열을 정수로 변환하는 함수 atoi()

atoi( )함수 atoi라는 함수명은 ASCII string to integer에서 따온 것. int atoi(char const *_String); #include #include int main(void){ char s="12345"; int num=atoi(s); printf("%d",num); return 0; } 결과: 12345 에 선언되어있음. 10진법으로 표기된 문자열을 정수로 바꿔줌. ※ 중간에 정수가 아닌 문자가 섞인 경우, 해당 문자 이전까지만 정수로 변환하여 반환함. ex) "123!45" > 123 "123a45" > 123 "123g" > 123 "123$" > 123 ※ 처음 나온 문자가 숫자가 아닌 경우 정수 0을 반환함. ex) "a123" > 0 "%123" > 0

오늘 사용해본 Event들('mouseenter', 'mouseleave', 'resize', 'contextmenu')

1. mouseenter : 마우스가 위로 올라갔을 때 발생하는 이벤트. ex) title[0].addEventListener("mouseenter", function); 2. mouseleave : 마우스가 떠났을 때 발생하는 이벤트. ex) title[0].addEventListener("mouseleave", function); 3. resize : 브라우저 창의 크기가 변했을 때 발생하는 이벤트. ex) window.addEventListener("resize", function); 4. contextmenu : 마우스를 우 클릭하여 메뉴창을 열 때 발생하는 이벤트. ex 1) window.addEventListener("contextmenu", function); ex 2) title[0].ad..