본문 바로가기

알고리즘22

[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.