알고리즘6 [JAVA / PYTHON] 연구소 3 (백준 17142) - 삼성기출 자바로 bfs,dfs 문제를 풀어본적이 없어서 간단한 bfs 문제를 풀어보려고 시도했다. 이전에 삼성 sw 역량테스트를 준비하면서 파이썬으로 쉽게 풀었지만 이제는 자바에 익숙해 지고 싶어서 자바로 풀어보았다. 자바로 풀면서 놀랐던것은 왜 순열과 조합과 관련한 라이브러리가 없는 걸까... 물론 분명히 있을거 같은데 본인이 못찾는 것일 수도 있다. 귀찮지만 직접 조합을 구현했다. 조합은 dfs로 구현하였다. 문제를 푸는 알고리즘은 그림으로 표현하겠다. 위와 같은 연구소 배열이 있다고 하자. 값이 2인것은 바이러스가 놓일 수 있는 위치다. 바이러스가 놓인 위치가 아니다. 이 중에서 2개를 활성화 한다고 하면 활성화 한곳은 0 으로 바꾸고 visited 에서 해당위치에 1로 바꿔준다. 또한 비활성화한 곳은 -1.. 2020. 8. 1. [JAVA] 괄호변환 (kakao 2020) 위 문제는 알고리즘을 다 제공하였다. 그대로 구현만 하면 되는 아주 심플한 문제다. 여기서 String 을 자바로 어떻게 다룰 것인지가 문제인데 예를 들어 String p = "maple Story" 라는 String 이 있을 때, 각각의 char에 접근하는 방법은 몇가지 있는데 1. charAt으로 접근하는 방법 for(int i=0;i 2020. 7. 31. [JAVA] 블록 이동하기 (kakao 2020) 최대한 깔끔하게 풀어보려는 욕심 때문인지 시간이 오래걸렸다. 이 문제를 풀면서 자바에 더 익숙해지고 있는 느낌이 든다. 알고리즘은 bfs 이지만 회전하는 부분의 구현이 복잡하다. 어렵진 않지만 작은 하나의 실수라도 굉장히 고민하게 할 수 있다. 만약 이 문제를 풀때 테스트케이스 1번에서 틀렸고 문제를 풀때 "방향" 이라는 설정을 잡았다면 방향에서 오류가 났을 가능성이 크다. 필자가 그러하였다. 예를 들어 데이터를 다음과 같이 잡았다고 하는 경우를 든다. (1,0,0) 의 의미는 좌표(1,0) 에서 방향이 0(수평) 본인은 방향을 잡고 풀었는데 테스트케이스 1번을 도저히 통과가 안되어 좌표 2개를 잡고 로봇의 움직임을 설정하였다. 모든 로직이 같지만 통과한 것을 보면 분명 방향 관련 로직을 잘못 설정했을 .. 2020. 7. 29. [JAVA/PYTHON] 자물쇠와 열쇠(kakao 2020) 파이썬이 역시 간결하긴하다. 그래도 자바공부중이니 자바로 열심히 풀어봤다. 문제를 접근하는 방법에 대해 고민을 많이 했다. 완전탐색으로 해도 될까했는데 대충 계산해본 결과 20*20 자물쇠와 20*20 키를 가지고 있다고 해도 시간초과는 나지 않을거 같았다. 그래서 완전탐색으로 풀기로 한다. 풀기위해서 메소드를 나누는데, 1) 키를 90도씩 돌리는 함수를 작성하기로 한다. 이는 rotate라는 이름으로 작성하였다. 2) 자물쇠 배열을 상하좌우 및 대각선까지 자물쇠 크기만큼 span한 새로운 자물쇠 배열을 초기화한다. 이를 spanLock이라는 이름으로 작성하였다. 3) 키와 자물쇠를 합쳤을 때 참인지 거짓인지 판별하는 check함수를 작성하였다. 4) span 되어있는 자물쇠에 키가 올수있는 모든 경우의.. 2020. 7. 26. [JAVA] 문자열 압축 (kakao 2020) String 관련 문제를 해결하기 위해서는 Stringbuilder 를 쓰면 편하다는 글을 보고 시도해보았다. 내가 문제를 풀기 위해 공부했던 String 관련 도구들은 다음과 같다. 1) String 의 길이를 알기 위해서는 length() 메소드를 사용하면 된다. 2) String + String 보다는 Stringbuilder를 통해 append 하면 연산이 빠르다. 3) substring(시작위치,끝위치) 메소드를 이용해 문자열을 자른다. split 보다 권장되는 사항이라고 한다. 위 3가지를 이용해 쉽게 풀었다. 알고리즘은 다음과 같다. 1) i = 1, answer = s의 길이; 2) ( i < 문자열 길이의 반) 이라면 3번으로 간다. 아니라면 10)번으로 간다. 3) cnt =1 로 초기.. 2020. 7. 25. [JAVA] 주식가격 - 프로그래머스lv2 파이썬으로 매일 풀다가 자바로 처음 도전했던 문제다. 처음 문제를 이해하지 못해서 한참 고민했지만 풀이방법은 매우 간단하다. [ 1, 2, 3, 2, 3 ] 배열이 주어졌을 때, 아래와 같은 과정을 거친다. (단, n=배열의 길이, i=0~n-1 ) 1) 해당 i 번째 인덱스의 값을 price 라는 변수에 저장한다. 그리고 cnt 라는 변수를 0 으로 초기화한다. 2) j= (i+1 ~ n-1 ) 이라고 하자. 루프를 돈다. 2-1) cnt 의 값을 증가시킨다. 2-2) 만약에 price 의 값보다 j가 더 작으면 루프를 탈출한다. 3) answer[i] 에 cnt 값을 저장한다. 아래는 소스코드 2020. 7. 25. 이전 1 다음