west일때와 north일때와 다른 연산을 해주어야 하고, 연산에서 소숫점이 발생하면(실수) 나중에 소수점이 사라질때 까지 X2를 해주는것이 핵심이다. Ex) 'northnorthwest'일 경우, 1. west: west는 90도 이므로 ans에 90이 들어간다.(ans=90) 2. northwest: 그 다음 단어는 north이므로 90/2^1를 빼준다.(ans=45) 3. northnorthwest: 그 다음 단어는 north 이므로 90/2^2를 빼준다.(ans=22.5) 여기까지 연산을 끝낸 후 ans를 살펴보면 소숫점이 있는 실수라는 것을 알 수 있다. 이제 ans가 정수가 될때까지 X2를 해준다. 그리고 X2를 해준만큼 k변수에도 X2를 해준다. ans는 45가 되고 한번 X2를 해주었으므로..
1)람다식이란? 람다식은 JAVA 8 에 추가된 가장 큰 특징의 하나로 자바에서 함수형 프로그래밍 형태를 받아들인 결과이다. 객체지향 프로그래밍은 클래스에 속성과 기능을 정의한다. 즉 기능은 객체에 포함된 개념이다. 하지만 함수형 프로그래밍은 기능 위주의 프로그래밍 기법으로 기능 즉 함수가 따로 존재한다. 람다식은 파라미터 및 리턴 타입에 따라 다양한 형태로 작성된다. 람다식은 축약형이 많은데 이때 형태가 기존의 코드와 사뭇 다르기 때문에 작성법을 많이 연습해야 손에 익는다.
직사각형이 없는 영역의 넓이를 구하기 위해 우선 직사각형인 부분은 1이라도 값을 부여하였다. 그리고 bfs를 통해 1이 아닌경우, 그리고 방문한적이 없는 경우(v[nr][nc]가 false인경우) 에만 Queue에 넣고 진행을 하였다. 각 영역의 넓이는 bfs함수 내에서 Queue에 한 칸씩 이동(저장)시마다 cnt변수를 +1해주어서 값을 구하였다. 이렇게 해서 bfs함수가 한번 끝나면 직사각형이 아닌 영억의 개수를 하나 구한거다(size변수). 이 문제는 직사각형 범위가 어디든 모양과 크기만같으면 좌표 값이 달라도 상관없이 풀 수 있다. 구해지는 범위의 넓이가 순서가 다르지만 문제의 조건중에 오름차순 정렬이 있으므로 상관없다.
이문제를 처음에 DFS로 접근했지만 많은 실패를 통해 BFS로 간단히 정답이 나올 수 있다는것을 알게되었다. 문제에서 동시에 인접노드로 이동하기 때문에 BFS를 사용하면 쉽게 문제를 해결할 수 있다. https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15B1cKAKwCFAYD SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com