일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- frontend
- fetch
- json
- java
- javascript
- CRUD
- CSS
- mysql
- NAS
- OOP
- synology
- PYTHON
- get
- portfolio
- backend
- flask
- atlas
- Project
- openapi
- pymongo
- venv
- beautifulsoup
- Algorithm
- Crawling
- requests
- flaskframework
- body
- mongodb
- github
- POST
Archives
- Today
- Total
wisePocket
[Algorithm] 좌표의 사분면 위치 알려주는 계산기 만들기 본문
좌표의 사분면 위치 알려주는 계산기
정해진 나의 룰에 따라서 연습 문제를 계속해서 답안을 보지 않고 스스로 풀어보고자 한다.
핵심이 되었던 연습 과정은 아래 두개 과정이다.
물론 이 구조가 이제 Java를 배우면서 더 깊게 변경 될 예정이다.
하지만 해당 카테고리 페이지는
알고리즘 문제 해결을 하기 위한 연습이 주 목적이라서
기본적으로 내가 객체 인스턴스화를 통해 메서드 호출을 구분하면서
"연산"에 집중 할 수 있는 나만의 틀로 활용하고자 한다.
https://ohnyong.tistory.com/177
[Algorithm★] 4칙연산을 해주는 계산기 - 객체 지향 - 혼자 만들기+ChatGPT의 피드백 받기
https://ohnyong.tistory.com/178
[Algorithm★] 4칙연산을 해주는 계산기 - 객체 지향 - 혼자 만들기+ChatGPT의 피드백 적용
이번에는 좌표를 입력하면 1,2,3,4 사분면중 어디에 위치하는지 알려주는 프로그램이다. 문제가 길지만 그만큼 조건을 다 주어진다는 점에서 대충보고 작성하다가 1차배열로 해결되는 것을 2차배열로 작성할 뻔 했다. 문제를 유심히보는 버릇을 들여야 겠다.
1. 문제 파악 과정
- 필요 데이터 파악
+--- 데이터 타입 확인
- 필요 메서드 파악
+--- 기본 입력부 input(){}
+-- 입력 값 갯수 확인
+-- 데이터 제한조건 파악(유효성검사 while loop)
+--- 기본 계산부 calculate(){}
+-- 필요 연산 확인
+-- 필요 조건 확인
+--- 기본 출력부 output(){}
+-- 출력할 데이터, 내용 확인
+--- 각 메서드 별 파라미터 전달 필요 부분 확인
2. 코드 작성 과정
- Main.java 실행부 생성 , Solution.java 클래스(설계도) 생성
- 클래스 member 구현
+--- 필요 데이터 정리에 따라 변수 선언
+--- 기본 생성자 선언
+--- 필요 메서드 정리에 따른 메서드 선언
+-- input(){}과 관련된 메서드부터 작성, 유효성 체크(진입부 메서드)
+-- calculate(){}의 실제 연산 로직 작성
+-- output(){}의 출력 관련 정리
- 실행부 Main.java에서 객체 인스턴스 생성 및 객체로부터 진입부 메서드 호출

1. Main.java
이제 Main 부분은 객체 생성 호출 이외엔 남는게 없다.
package Algorithm09; public class Main { public static void main(String[] args) { Solution solution = new Solution(); solution.inputElement(); } }
2. Solution.java
조건 부분을 천천히 생각하면서 풀어냈다. 연산은 이미 제한조건으로 다 주어줬기 때문에 조건을 실수하지 않고 작성하면 된다. 마음이 급해서 조건을 생략하고 보다가 2차 배열을 사용해야하는지 착각했다. 다음부턴 제한 조건을 유의하면서 진행해야 겠다.
package Algorithm09; import java.util.Scanner; public class Solution { /*문제 설명 사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다. 스크린샷 2022-07-07 오후 3.27.04 복사본.png x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다. x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다. x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다. x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다. x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.*/ // dot의 길이 = 2 // dot[0]은 x좌표를, dot[1]은 y좌표를 나타냅니다 //-500 ≤ dot의 원소 ≤ 500 // dot의 원소는 0이 아닙니다. //필요한 데이터 //int x 입력 y 입력 2개 //x, y 2개 값을 담는 배열 //////////// [{x,y}, {x,y}, ... ] XXXX //////////// 그럼 가변배열이여야 되는가. XXXX //////////// 배열의 [n][0] idx = x XXXX //////////// 배열의 [n][1] idx = y XXXX // 제한조건을 늦게 봤다. 1차배열로 진행 // [{x}, {y}] <- 1개의 배열, length = 2 // 단건으로 찍어내는 것이다. 착각함. //연산은 //x>0 && y>0 = 1 + "사분면" //x<0 && y>0 = 2 + "사분면" //x<0 && y<0 = 3 + "사분면" //x>0 && y<0 = 4 + "사분면" //메서드는 input x, y //계산 calculate(){} //output(){} int x; int y; String locationStr = "사분면"; int[] arr; int locationNum; Scanner sc = new Scanner(System.in); public Solution() { } void inputElement() { //System.out.println("몇개의 점을 찍으시겠습니까?"); //배열의 크기 설정 //arrSize = sc.nextInt(); System.out.println("좌표의 x값을 입력하십시오."); arr = new int[2]; while (true) { x = sc.nextInt(); if (x < -500 && x > 500) { System.out.println("좌표 값은 -500~500 사이의 값을 입력해주십시오."); continue; } arr[0] = x; break; } System.out.println("좌표의 y값을 입력하십시오."); while (true) { y = sc.nextInt(); if (y < -500 && y > 500) { System.out.println("좌표 값은 -500~500 사이의 값을 입력해주십시오."); continue; } arr[1] = y; break; } System.out.println("입력한 값은 [" + x + ", " + y + "] 입니다."); calculate(arr); } void calculate(int[] arr) { //x>0 && y>0 = 1 + "사분면" //x<0 && y>0 = 2 + "사분면" //x<0 && y<0 = 3 + "사분면" //x>0 && y<0 = 4 + "사분면" if (arr[0] > 0 && arr[1] > 0) { locationNum = 1; } else if (arr[0] < 0 && arr[1] > 0) { locationNum = 2; } else if (arr[0] < 0 && arr[1] < 0) { locationNum = 3; } else { locationNum = 4; } outputLocation(locationNum); } void outputLocation(int locationNum) { System.out.printf("입력한 좌표의 위치는 %d%s 입니다.", locationNum, locationStr); } }
'Java & Algorithm > Algorithm Practice' 카테고리의 다른 글
[Algorithm] 제곱근 루트 구하는 계산기 만들기 (0) | 2023.08.07 |
---|---|
[Algorithm] 옷가게 할인 적용 계산기 만들기 (0) | 2023.08.06 |
[Algorithm] 원하는 피자 등분, 입력한 인원에 따른 필요한 피자판 수를 구하는 계산기 만들기2 (0) | 2023.08.02 |
[Algorithm] 입력한 인원에 따른 필요한 피자판 수를 구하는 계산기 만들기 (0) | 2023.08.02 |
[Algorithm] 음식과 음료 주문, 계산서를 출력하는 계산기 만들기 (0) | 2023.08.02 |