목록전체 글 (7)
취준생
https://www.codetree.ai/ko/frequent-problems/problems/microbial-research/description?introductionSetId=&bookmarkId= 삼성 코딩테스트 기출 문제 설명: 미생물 연구 | 코드트리삼성전자 코딩테스트 기출 문제 미생물 연구의 상세 설명입니다. 문제 요구사항을 정확히 파악하고 효율적인 알고리즘을 설계해보세요.www.codetree.ai 아래 세 단계를 Q번 반복1) 미생물 투입2) 배양 용기 이동3) 실험결과 기록 solve 함수에 큰 로직을 다 넣고 진짜 필요한 것만 함수로 뺐다. !!! 배양 용기의 (0, 0)을 좌상단으로 생각하고 구현함 !!! 미생물 정보를 담을 구조체에 초기 상태를 기준으로, x, y: 좌상단..
https://www.acmicpc.net/problem/5373 보고 로직은 빨리 떠올랐는데 구현할 때 살짝 까다로워서 오래 걸렸다..전역변수 side에 값 넣을 때 방향이나,, junc 배열 채울 때 B가 뒤집어져있으니까 종이에다가 그려가면서 난리쳤다 ㅠ확실히 3차원적으로 생각해야하는 문제에 약한 것 같음...그리고 변수이름 정하기 힘들다..ㅋㅋ 구글에 "접합 영어로" "큐브 돌리다 영어로" ... 우선은 큐브의 한 면을0 1 23 4 56 7 8이렇게 생각하는데, up right down left 의 4가지 side로 구분했다.side[]에 저장할 때 아무렇게나 하는 게 아니라 큐브의 회전을 생각해서 할당해줘야한다. (구현이 쉬우려면)0에서부터 시계방향으로 진행하도록 해줬다.012(up) 258(r..

https://www.acmicpc.net/problem/20057 토네이도 생겨먹은 게 귀찮아보여서 안풀다가 드디어 풀었다. 토네이도는 중심에서부터 진행하는데 currD와 l을 변경해주면서 보드 전체를 돌게 했다. 이걸 어떻게 구현할까.. 하다가 현재 위치(위 그림의 y 위치)에서 currD 방향(x -> y 방향), currD의 시계방향(위 그림의 y -> 위쪽 7% 방향)을 축으로 잡아서 축마다의 이동거리를 저장했다.windNode의 dd는 currD 방향으로의 이동거리, dcw는 currD의 시계방향으로의 이동거리, r은 이동하는 모래의 비율 이동한 모래들의 총량을 sum에 저장하여 a로 이동한 모래를 구했다. 토네이도가 보드 전체를 다 휩쓸고 난 후 손실된 모래 양이 ans #include us..
https://www.acmicpc.net/problem/13460 dfs로 풀었다.. 다 풀고 bfs로도 풀어봤는데 채점 페이지에서 시간이 더 오래 걸린다..!다른 코드들도 찾아봐야겠다. 나는 뭔가 너무 정직하게만? 구현해서 느린 것 같다. 뭔가뭔가 테크닉이 있겠지 dfs 기본 틀에서 상하좌우로 기울이는 함수만 구현해서 적용하니까 됐다. 보드 상태를 입력받을 때 'R'과 'B'를 빈 칸으로 만들고 대신 구슬들의 x, y 좌표를 따로 관리했다. 전역 변수board: 벽, 구멍, 빈 칸으로만 구성된 보드whole: 구멍 위치red/blue: 빨간/파란 구슬 (현재) 위치 dfs 돌리는데 나머지 tilt 관련 함수들에서 전역 변수를 조작하기 때문에 red와 blue 값을 저장해놓고 이후에 백업해줬다. d..
https://www.acmicpc.net/problem/9184 주어진 재귀 함수를 보면, 특징 1) a, b, c 셋 중 하나가 0 이하일 때 1 특징 2) a, b, c 셋 중 하나가 20 초과일 때 w[20][20][20] 그리고 나머지 케이스에서 재귀 호출을 할 때특징 3) 인수가 a, b, c, a - 1, b - 1, c - 1 에 속한다. dp 테이블 채우기 좋자나..특징 1로 베이스를 깔면 나머지 테이블은 채울 수 있다. -50 ≤ a, b, c ≤ 50 라고 제한이 나와있긴 하지만 0 이하이면 0으로 치환시키고 20 초과이면 20으로 치환시키면 되니까테이블은 인덱스 0부터 20까지만 필요하다. 이중 for문으로 베이스 깔아주고, 3중 for문 돌면서 나머지 테이블 채워준다.답 출력할 때..
https://www.acmicpc.net/problem/12100 최대 5번 이동해서 만들 수 있는 가장 큰 블록의 값을 구해야한다. 움직일 수 있는 방향은 상하좌우 4가지.4^5 = 1024니까 그냥 돌리면 될 것 같다. d 방향으로 움직이는 것은, d 방향으로 블럭 모두 밀기 -> 합쳐지는 블럭 합치기 -> d 방향으로 다시 밀기 한 방향으로 미는 것은 간단하다.. 블럭을 모두 큐에 넣었다가 빈 보드에 끝에서부터 한 칸씩 넣는다.합치는 것은, 인접한 칸과 비교하면 된다. 상하좌우 각 방향마다 구현이 조금씩 차이가 나기 때문에 그냥 함수를 방향별로 다 쪼갰다. (복붙..)뭔가 더 아름다운 코드가 생각났지만.. 지금은 귀찮다... 다음 depth 방문 후 보드 복구하는 것 잊지말기.. 아래는 나의 쓸..

https://www.acmicpc.net/problem/14500 테트로미노 5가지. 회전, 대칭시킨 것도 고려해야 한다.테트로미노는 블럭 4개로 이루어져있고 종류도 5개라서 그냥 dx dy로 하드코딩했다..4개 이상으로 만든 폴리오미노 문제가 있다면 이 방법은 번거로울 것 같다.근데 뭐.. 이건 되니깐 테트로미노를 이리저리 회전, 대칭 시키는 것보다 보드를 움직이는 게 더 쉬울 것 같았다.검은 점이 0, 0이라고 생각하면 보드는 회전/대칭하여 총 8가지의 형태가 가능 원본 배열을 이리저리 조작해서 새로 만드는 것보다 입력받을 때 채워넣었다.. 나머지는 뭐 단순연산이니까.. #include using namespace std;int n, m;int board[8][500][500];int ans;// ..