코딍코딍
코딩기록
코딍코딍
전체 방문자
오늘
어제
  • 분류 전체보기 (271)
    • 개발 (2)
    • Java (1)
    • 스프링 (28)
    • JPA (11)
    • Git (3)
    • 알고리즘 (160)
      • 백준 (132)
      • 프로그래머스 (8)
      • SWEA (20)
    • 토이 프로젝트 (14)
      • 간단한 Springboot CRUD (1)
      • 게시판 프로젝트 (13)
    • 알고리즘 개념정리 (8)
    • 오류 해결 (13)
    • 보류 (0)
    • AWS (5)
    • 트러블 슈팅 (0)
    • 회고 (3)
    • CS (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

최근 글

티스토리

hELLO · Designed By 정상우.
코딍코딍

코딩기록

알고리즘/SWEA

[SWEA] 9658번 : 유효숫자 표기

2023. 11. 2. 22:02

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXCjn9TKJmUDFAX0&categoryId=AXCjn9TKJmUDFAX0&categoryType=CODE&problemTitle=%EC%9C%A0%ED%9A%A8%EC%88%AB%EC%9E%90&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1&&&&&&&&&

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

문제

주어진 정수의 앞 두 자리를 유효숫자로 하여 표기하는 프로그램을 작성하세요.

예를 들어 정수 588235는 5.88235*105 인데, 앞의 소수 부분을 소수점 두 번째 자리에서 반올림하여 5.9*105로 나타내는 것입니다.

하나의 예외로, 9999 같은 경우 9.999*103에서 9.999의 소수점 두 번째 자리를 반올림하여 1.0*104으로 나타내야 합니다.

 

입력

첫 번째 줄에 테스트 케이스의 수 TC가 주어진다

이후 TC개의 테스트 케이스가 새 줄로 구분되어 주어진다.

각 테스트 케이스마다 하나의 정수 N이 주어진다. ( 10^2 ≤ N ≤ 10^100000)

 

출력

각 테스트 케이스마다 ‘# ’( t 는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,

주어진 정수의 앞 두 자리를 유효숫자로 하여 출력한다. 출력 예제의 형식을 따라 출력해야 한다.

 


소스코드

import java.io.*;

class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int t = Integer.parseInt(br.readLine());

        for (int i = 0; i < t; i++) {
            String n = br.readLine();
            int square = n.length() - 1; // 지수

            int x = Integer.parseInt(n.charAt(0) + ""); // 첫 번째 숫자
            int y = Integer.parseInt(n.charAt(1) + ""); // 두 번째 숫자
            int z = Integer.parseInt(n.charAt(2) + ""); // 세 번째 숫자

            // 반올림되면
            if (z >= 5) {
                y += 1;
                if(y == 10) {
                    x += 1;
                    y = 0;
                    if(x == 10) {
                        x = 1;
                        square += 1;
                    }
                }
            }

            sb.append("#" + (i + 1) + " " + x + "." + y + "*10^" + square + "\n");
        }

        System.out.println(sb);
    }
}

 

해결 방법

  1. 지수(square)는 기본적으로 [입력받은 문자열의 길이 - 1]이다.
  2. 반올림에 영향을 받는 첫 번째(x), 두 번째(y), 세 번째(z) 숫자를 뽑는다.
  3. z를 반올림한다. 올림이 되면 y를 1 증가시킨다.
  4. y가 10이면 x를 1 증가시키고 y는 0이 된다.
  5. x가 10이면 x를 1로 바꾸고 지수(square)를 1 증가시킨다.

'알고리즘 > SWEA' 카테고리의 다른 글

[SWEA] 11315번 : 오목 판정  (1) 2023.11.03
[SWEA] 1860번 : 진기의 최고급 붕어빵  (0) 2023.11.02
[SWEA] 16910번 : 원 안의 점  (0) 2023.10.26
[SWEA] 18662번 : 등차수열 만들기  (1) 2023.10.24
[SWEA] 2001번 : 파리 퇴치  (1) 2023.10.23
    '알고리즘/SWEA' 카테고리의 다른 글
    • [SWEA] 11315번 : 오목 판정
    • [SWEA] 1860번 : 진기의 최고급 붕어빵
    • [SWEA] 16910번 : 원 안의 점
    • [SWEA] 18662번 : 등차수열 만들기
    코딍코딍
    코딍코딍
    ㅎ2

    티스토리툴바