개발 블로그를 벨로그로 이전했습니다!
새로운 글은 아래 링크에서 확인해주세요 :)

https://velog.io/@nawaraing/posts

nawaraing (그냥 준현) / 작성글 - velog

velog.io

User Flow 설계도

발생한 error

문제 상황

원인

숫자로 변환할 수 없는 문자열이 입력값으로 들어왔을 때 발생

해결방안

입력값을 문자로 비교해서 해결

입력값이 숫자로서 값을 비교하거나 연산하는 것이 아니었기에 사용할 수 있었던 방법

Python 코드

import random
import time

def error_page(mini, maxi):
    print(str(mini) + "~" + str(maxi) + "사이에 숫자만 입력 가능합니다!")

def exit_page():
    print("게임을 종료합니다.", end="")
    for i in range(2):
        time.sleep(0.5)
        print(".", end="")
    exit()

def start():
    while True:
        minimum = 1
        maximum = 100
        print("=== UP & DOWN Game ===")
        print("1. 시작하기")
        print("0. 종료하기")
        action = input()
        if (action == "0"):
            exit_page()
        elif (action == "1"):
            rand_num = random.randint(1, 100)
            # print("rand_num: " + str(rand_num))
            while True:
                print("숫자를 입력해주세요(" + str(minimum) + "~" + str(maximum) + ") >>")
                num = input()
                if not num.isnumeric() or int(num) < minimum or int(num) > maximum:
                    error_page(minimum, maximum)
                    continue
                if (int(num) == rand_num):
                    while True:
                        print("정답입니다!")
                        print("1. 다시하기")
                        print("0. 종료하기")
                        action = input()
                        if (action == "0"):
                            exit_page()
                        elif (action == "1"):
                            minimum = 1
                            maximum = 100
                            rand_num = random.randint(1, 100)
                            break
                        else:
                            error_page(0, 1)
                elif int(num) < rand_num:
                    minimum = int(num)
                    print("UP!")
                elif int(num) > rand_num:
                    maximum = int(num)
                    print("DOWN!")
        else:
            error_page(0, 1)

# Game Start
start()

'-- 기타 -- > IT KOREA 국비 지원 강의' 카테고리의 다른 글

@PathVariable  (0) 2024.03.11
Spring boot  (0) 2024.03.07
day067  (0) 2024.03.07
QnA  (0) 2024.03.06
[Spring] 자체 프레임워크로 이관  (0) 2024.03.05
💡 이 글은 코리아IT아카데미 알고리즘 스터디 그룹과 공유하기 위해 작성되었습니다

 

목차

  1. 연습 제작 기준
  2. 백준 사용법
  3. 핵심 자료구조 & 알고리즘
  4. 시간복잡도 계산 방법

연습 제작 기준

  • 주에 한 연습씩 (월요일 ~ 일요일)
  • 각 연습은 하나의 주제를 가짐 (ex. 스택, dp, bfs, ...)
  • 각 연습은 총 7문제 (1일 1문제 컨셉, 필수는 아님)
  • 문제 난이도: 브론즈 3개, 실버 2개, 골드 1개, 플래티넘 1개
    (적당한 문제가 없을 시 변동 가능)
  • 정답률 높은 문제 위주 (왜? 함정 없이 정석적인 문제)

백준 사용법

📑 JAVA 정답 제출 방법

푼 문제의 ‘제출’ 메뉴에 아래 두가지를 지켜서 제출

  1. package 삭제
  2. class명 Main으로 수정

위를 지키지 않을 경우 아래의 에러 발생

 

🏅 solved.ac 연동 방법

solved.ac를 백준에 연동하면 문제&개인 티어를 볼 수 있습니다

  1. 백준 사이트 접속
  2. 상단 ‘설정’ 클릭
  3. 좌측 ‘solved.ac’ 클릭 후 연동 수행

  1. 좌측 ‘보기’ 클릭
  2. ‘solved.ac 티어’ 메뉴에서 보기로 변경

 

📊 연습 진행 상황 읽는 법


핵심 자료구조 & 알고리즘

🗃️ 자료구조

  • array
  • stack
  • queue
  • graph
  • priority queue
  • tree
  • heap
  • dequeue
  • linked list
  • b-tree
  • hash table

*제가 생각하는 중요도 순으로 작성했습니다.

*다른 의견 있으시면 적극 반영하겠습니다.

 

🤖 알고리즘

  • dp
  • greedy
  • bruteforce
  • dfs
  • bfs
  • 구현
  • 수학
  • 그래프 이론
  • 투포인터
  • 게임 이론
  • 백트래킹
  • prefix sum
  • 최단 경로
  • 다익스트라
  • 이진 탐색

시간복잡도 계산 방법

⏱️ 1억 == 1초

아래 코드는 모두 1초가 걸림

 

Problem details

https://www.acmicpc.net/problem/17287

Ideas

  1. 열린 괄호는 stack에 저장하고, 닫힌 괄호가 나오면 stack에서 빼낸다.
  2. 숫자가 나왔을 때, stack에 저장된 모든 열린 괄호의 점수가 해당 숫자의 점수다.

Answer code (Java)

import java.util.Scanner;
import java.util.Stack;

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		String n = sc.nextLine();
		Stack<Boolean> point = new Stack<Boolean>();
		int maxi = 0;
		
		for (int i = 0; i < n.length(); i++) {
			if (n.charAt(i) == '[') {
				point.add(true);
				point.add(true);
				point.add(true);
			} else if (n.charAt(i) == '{') {
				point.add(true);
				point.add(true);
			} else if (n.charAt(i) == '(') {
				point.add(true);
			} else if (n.charAt(i) == ']') {
				point.pop();
				point.pop();
				point.pop();
			} else if (n.charAt(i) == '}') {
				point.pop();
				point.pop();
			} else if (n.charAt(i) == ')') {
				point.pop();
			} else if ('0' <= n.charAt(i) && n.charAt(i) <= '9') {
				if (maxi < point.size())
					maxi = point.size();
			}
		}
		System.out.println(maxi);
	}
}

 

기술 면접

팀프로젝트에서 무슨 역할을 맡았는지? 

왜 그 역할을 맡았는지? 

 

AWS 무료인데 왜 사용해보지 않았는지?

 

DP에 대해 알고 있는지?
다른 알고리즘과 차별점은 무엇인지?

 

종이 한 장 가지고 이커머스를 설계

테이블 설계 그리는 동안 왜 그렇게 하는지 중간중간 질문함

회원, 상품, 구매내역, 장바구니 4개 가지고 테이블 구체화 시작

구매내역과 주문내역 구분 해야 되지 않냐는 질문

멤버 아이디가 PK이면 자료형 뭐 쓸지 질문

비밀번호 암호화 안 했는지 질문

sha 알고 있는지 질문

복호화가 안 되는 기술인데 그러면 나중에 회원 비밀번호를 어떻게 비교할지 질문함

 

백준에서 간단한 for문 문제 손 코딩

문제지에 프로덕션 코드라고 생각하고 작성하라고 쓰여있음

주요 조건이 빠져있는데 의도를 파악하는 것도 테스트

 

문화 면접

성장이 뭐라고 생각하는지? 

 

다른 후보자와 비교했을 때 본인의 장점

다른 후보자와 비교했을 때 본인의 단점

(직무적인 됐든 생활적인 됐든)

 

 

스프링이란?

엔터프라이즈용 Java 애플리케이션 개발을 도와주는 오픈소스 경량급 애플리케이션 프레임워크

  1. POJO
  • 순수 자바 객체
  • Java 스펙에 정의된 기술만 사용
  • 외부 라이브러리나 모듈을 사용하지 않음
  • 특정 기술이나 환경에 종속되지 않음

    2. IoC/DI

  • 제어의 역전
  • 의존성 주입

    3. AOP

  • 공통된 관심사를 분리하여 모듈화 하는 프로그래밍 기법

    4. PSA (Portable Service Abstraction)

  • 특정 기술과 관련된 서비스를 추상화하여 일관된 방식으로 사용할 수 있게 함
  • 예) JDBC

 

스프링부트란?

스프링의 문제점을 해결해주기 위해 개발된 프레임워크

스프링 애플리케이션 개발을 빠르게 시작할 수 있도록 도와주는 프로젝트에서 시작

  1. 간결한 설정 - xml 필요 없다 
  2. 내장 서버 - tomcat
  3. 의존성 관리 간소화 - application.properties starter
  4. 운영 편의성 - ???

'-- 기타 -- > 개발 일기' 카테고리의 다른 글

[면접 준비] 디자인 패턴 & MVC 패턴이란?  (0) 2024.04.25
[면접 준비] OOP란?  (0) 2024.04.25

디자인 패턴이란?

프로그래밍 중에 빈번하게 발생하는 문제의 해결방법을 정리해둔 규약

 

MVC 패턴이란?

디자인 패턴 중 하나

프로젝트를 구성할 때 구성요소를 모델, 뷰, 컨트롤러 3가지 역할로 구분

 

모델

데이터와 데이터를 가공하는 컴포넌트

  1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야한다 
  2. 뷰나 컨트롤러에 대해서 어떤 정보도 알고 있으면 안 된다
  3. 변경이 일어나면 변경 통지에 대한 처리 방법이 구현되어 있어야 한다

 

사용자에게 보여지는 인터페이스

데이터와 객체의 입력과 출력을 담당

  1. 모델이 가지고 있는 정보를 따로 저장해서는 안 된다
  2. 모델이나 컨트롤러에 대해 어떤 정보도 알고 있으면 안 된다
  3. 변경이 일어나면 변경 통지에 대한 처리 방법이 구현되어 있어야 한다

 

컨트롤러

모델과 뷰를 잇는 다리 역할

사용자 이벤트를 처리

  1. 모델과 뷰에 대해 알고 있어야 한다
  2. 모델이나 뷰의 변경을 모니터링 해야 한다

 

MVC패턴을 쓰는 이유

각자의 역할에 집중하여 개발하면 유지보수성과 확장성, 유연성이 증가

'-- 기타 -- > 개발 일기' 카테고리의 다른 글

[면접 준비] 스프링 & 스프링부트란?  (0) 2024.04.26
[면접 준비] OOP란?  (0) 2024.04.25

객체 - 실재하는 모든 것

 

추상화, 상속, 다형성, 캡슐화가 특징

 

  1. 추상화 - 공통의 속성과 기능을 모아 추출하는 것
  2. 상속 - 기존에 클래스를 재활용 하여 새로운 클래스를 만드는 것
  3. 다형성 - 어떤 객체의 속성이나 기능이 상황에 따라 다양한 형태를 띠는 것, 메서드 재정의, 메서드 중복정의가 이에 해당
  4. 캡슐화 - 서로 연관있는 속성과 기능을 하나의 캡슐로 묶어서 외부로부터 보호하는 것

build.gradle 파일은 Gradle 빌드 도구를 사용하는 프로젝트에서 프로젝트의 빌드 구성 및 관리를 위한 스크립트입니다

이 파일은 Grooby 또는 Kotlin DSL(Domain Specific Language)을 사용하여 작성되며, 프로젝트의 의존성 관리, 빌드 구성, 테스트 설정 등을 포함합니다

 

구조

일반적으로 build.gradle 파일은 다음과 같은 구조를 가집니다

plugins {
    id 'java'
}

repositories {
    jcenter()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks {
    // 빌드 태스크 설정
}

 

위의 예제에서 `plugins`, `repositories`, `dependencies`, `tasks`는 각각 Gradle 빌드 스크립트에서 사용되는 섹션입니다

 

주요 섹션들

  • plugins
    `plugins` 섹션은 Gradle 플러그인을 설정하는 데 사용됩니다
    예를 들어, Java 플러그인을 추가하려면 `id 'java'`와 같이 선언합니다
  • repositories
    `repositories` 섹션은 프로젝트에서 사용할 외부 저장소(예: Maven Central, jCenter 등)를 설정합니다
    의존성을 해결하기 위해 Gradle은 여기에서 저장소를 검색합니다
  • dependencies
    `dependencies` 섹션은 프로젝트의 의존성 관리를 설정합니다
    여기에는 프로젝트가 사용하는 외부 라이브러리 및 모듈의 의존성이 포함됩니다
  • tasks
    `tasks` 섹션은 빌드 프로세스에서  수행할 작업을 정의합니다
    각 태스크는 특정한 빌드 작업을 수행하거나 다른 태스크에 의존하는 등의 작업을 정의할 수 있습니다

dependencies 설정

  • implementation
    `implementation`는 프로덕션 코드에서 사용되는 의존성을 설정하는 데 사용됩니다
    이 의존성은 컴파일 시 클래스 경로에 포함되며, 런타임 시에는 애플리케이션의 클래스 패스에 추가됩니다
    주로 프로젝트의 핵심 기능에 필요한 라이브러리를 추가할 때 사용됩니다
  • compileOnly
    `compileOnly`는 컴파일 시에만 사용되는 의존성을 설정하는 데 사용됩니다
    이 의존성은 컴파일 시에만 클래스 경로에 포함되며, 런타임 시에는 제외됩니다
    주로 컴파일 시에만 필요한 라이브러리를 추가할 때 사용됩니다
  • testImplementation
    `testImplementation`은 테스트 코드에서 사용되는 의존성을 설정하는 데 사용됩니다
    이 의존성은 테스트 소스 코드의 클래스 경로에 포함되며, 테스트 시에만 사용됩니다
  • runtimeOnly
    `runtimeOnly` 키워드는 런타임 시에만 사용되는 의존성을 설정하는 데 사용됩니다
    이 의존성은 컴파일 시에는 클래스 경로에 포함되지 않으며, 런타임 시에만 필요한 경우에 사용됩니다
    주로 애플리케이션의 실행 환경에 따라 필요한 라이브러리를 추가할 때 사용됩니다

JSP(JavaServer Pages)는 서버 측에서 동적으로 웹 페이지를 생성하는 기술로, HTML 안에 Java 코드를 포함하여 웹 페이지를 작성할 수 있습니다. JSP는 Java 언어를 기반으로 하여, 서블릿 컨테이너에서 실행됩니다

특징

  • 간편한 문법
    JSP는 HTML과 Java 코드를 혼합하여 사용하기 때문에 웹 개발자에게 친숙하고 익숙한 문법을 제공합니다
  • 동적 콘텐츠 생성
    JSP를 사용하면 동적 콘텐츠를 생성할 수 있으며, 서버 측에서 데이터를 처리하여 동적으로 페이지를 생성할 수 있습니다
  • 재사용 가능한 컴포넌트
    JSP는 Java의 기능을 활용하여 재사용 가능한 컴포넌트를 생성할 수 있습니다. 이를 통해 코드의 재사용성을 높일 수 있습니다

장단점

장점

  • 서버측에서 동적으로 웹 페이지를 생성할 수 있어 다양한 콘텐츠를 제공할 수 있습니다
  • Java 언어를 기반으로 하기 때문에 안정적이고 강력한 기능을 제공합니다
  • 웹 개발자가 익숙한 HTML 문법을 사용하여 쉽게 웹 페이지를 작성할 수 있습니다

단점

  • Java 코드와 HTML 코드가 혼합되기 때문에 코드가 복잡해질 수 있습니다
  • JSP는 서블릿으로 변환되어 실행되기 때문에 초기 로딩 시간이 길어질 수 있습니다
  • 코드의 가독성과 유지보수성이 낮아질 수 있습니다

동향

최근 몇 년간 프론트엔드 기술의 발전으로 인해 클라이언트 측에서도 동적으로 콘텐츠를 생성하고 제어할 수 있는 기술들이 많이 등장했습니다

이로 인해 JSP보다는 SPA(Single Page Application)와 같은 프론트엔드 프레임워크 및 라이브러리 사용이 더 많아지고 있습니다

깃헙 블로그를 만들기 위해 테마를 찾아봤다

내 기준 예쁜 테마 목록을 추려봤다

 

1. Webjeda Slides

http://jekyllthemes.org/themes/slides/

 

Webjeda Slides

Webjeda slides is built using revealjs. The idea is to keep all the slideshows in one place as posts. All your presentations can be accessed from one place!

jekyllthemes.org

 

  • PPT 슬라이드에 적합
  • 슬라이드 넘어가는 모션이 트렌디함

 

2. Agency

http://jekyllthemes.org/themes/agency/

 

Agency

This is the Agency Bootstrap theme converted to a gem-based Jekyll theme with GitHub Pages support. While this had been done before, (here, here, and here), these are outdated and have not been updated or maintained for years. I built this theme from the m

jekyllthemes.org

  • 회사 소개 기본 양식
  • 연혁표가 존재

 

3. Modern Blog

https://inded.xyz/Jekyll_modern-blog/

 

Modern Blog

Planes are cool! The Fly! Dolor sit amet? Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin vestibulum non mi non pulvinar. Donec tempus risus vel ex fringilla tempor. Vivamus pharetra non mauris quis fermentum. Vestibulum sed maximus elit, si

inded.xyz

  • 블로그에 적합
  • 게시글 클릭 시 모션이 화려함

 

4. dentistSmile

http://obaez.com/dentistsmile/

 

DentistSmile | Dental Jekyll Theme

DentistSmile A responsive Jekyll theme for dental clinics.

obaez.com

  • 고객 예약 사이트에 적합
  • 서비스에 대한 자세한 설명 작성 가능

 

5. Spectral

http://jekyllthemes.org/themes/spectral/

 

Spectral

HTML5 UP makes spiffy HTML5 site templates that are: - Fully Responsive - Built on intelligent HTML5 + CSS3 - Super Customizable - 100% Free under the Creative Commons, which means you can use them for personal stuff, use them for commercial stuff, change

jekyllthemes.org

  • 짧은 설명을 여러 개 쓰기에 적합
  • 뒤에 고정된 사진 덕에 스크롤 내리는 모션이 트렌디해 보임
  • 화면이 작아지면 스크롤 시에 다르게 동작함

 

6. Jalpc

http://jekyllthemes.org/themes/Jalpc-jekyll-theme/

 

Jalpc

This is a simple, beautiful and swift theme for Jekyll. It’s mobile first, fluidly responsive, and delightfully lightweight.It’s pretty minimal, but leverages large type and drastic contrast to make a statement, on all devices.The landing page of the b

jekyllthemes.org

  • 포트폴리오에 적합
  • 연혁표 작성 가능
  • 스킬 스탯 표시 7각 그래프 표시 가능

 

7. ???

https://fullit.github.io/#2section

 

FullIt

Fullit make your landing page a fullpage sliding tool usefull for web marketing and advertising

fullit.github.io

  • 스크롤 시 모션이 화려함
  • 글만으로 설명하기에 적합

 

8. simple-texture

https://yizeng.github.io/jekyll-theme-simple-texture/

 

Simple Texture

A gem-based responsive simple texture styled Jekyll theme.

yizeng.github.io

  • 스크롤에 따른 화면 이동이 트렌디함
  • 글만으로 설명하기에 적합

 

9. Neumorphism

http://jekyllthemes.org/themes/neumorphism/

 

Neumorphism

Neumorphism Neumorphism Neumorphism designed Jekyll theme for personal websites, portfolios and resumes. This is a personal website built with Jekyll, which is based on the new Neumorphism design trend and was developed with a mobile-first approach. It is

jekyllthemes.org

  • 포트폴리오에 적합
  • 개발자스러운 디자인
  • 반응형 요소가 많음
  • 연혁표 작성 가능
  • 디자인이 다소 촌스러움

 

10. jekyll-theme-WuK

http://jekyllthemes.org/themes/neumorphism/

 

Neumorphism

Neumorphism Neumorphism Neumorphism designed Jekyll theme for personal websites, portfolios and resumes. This is a personal website built with Jekyll, which is based on the new Neumorphism design trend and was developed with a mobile-first approach. It is

jekyllthemes.org

  • 스크롤 모션이 트렌디함
  • 간결한 디자인
  • 글로만 설명하기에 적합

 

11. uBuild

http://jekyllthemes.org/themes/ubuild/

 

uBuild

Welcome to uBuild [beta] uBuild is an open-source Jekyll based theme and comes with 16 fully responsive design block. It also doubles as a builder tool when used inside the Forestry content manager. Learn More Take a look at our live demo to get a feel for

jekyllthemes.org

  • 앱, 홈페이지 등의 IT 서비스 소개에 적합
  • 깔끔한 디자인

 

12. Event

http://jekyllthemes.org/themes/event-jekyll-theme/

 

Event

Event Jekyll Theme Please refer to this repository for instructions on how to use it.

jekyllthemes.org

  • 첫 화면 사진으로 이목 끌기 적합

 

13. web-portfolio

https://github.com/congchu/web-porfolio?tab=readme-ov-file

 

GitHub - congchu/web-porfolio: 개발자를 위한 쉽고 빠른 웹 포트폴리오 만들기

개발자를 위한 쉽고 빠른 웹 포트폴리오 만들기 . Contribute to congchu/web-porfolio development by creating an account on GitHub.

github.com

  • 포트폴리오에 적합
  • 디자인 예쁨
  • 수치 표현할 수 있는 그래프 존재

 

'-- 기타 --' 카테고리의 다른 글

[MacOS] Brew(Homebrew)란?  (0) 2024.04.14
[Ruby] rbenv란?  (0) 2024.04.13
오픈 소스 첫 풀리퀘 기념  (0) 2024.02.15

Problem details

https://school.programmers.co.kr/learn/courses/30/lessons/258711

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

Ideas

  1. 들어오는 선 없이 나오는 선이 2개 이상인 점이 정점이다.
  2. 정점에서 나오는 선의 갯수가 전체 그래프의 수이다.
  3. 정점과 정점에 연결된 선을 지우고 나서, 연결된 선이 없거나 들어오는 선이 하나고 나오는 선이 없는 정점의 갯수가 막대 모양 그래프의 갯수이다.
  4. 정점과 정점에 연결된 선을 지우고 나서, 나오는 선이 2개인 정점의 갯수가 8자 모양 그래프의 갯수이다.
  5. 전체 그래프의 수에서 막대 모양 그래프의 갯수와 8자 모양 그래프의 갯수를 빼면 도넛 모양 그래프의 갯수이다.

 

Answer code (Java)

class Solution {
    public int[] solution(int[][] edges) {

        // 배열 생성
        int[] shootCnt = new int[1000000 + 1];
        int[] receiveCnt = new int[1000000 + 1];
        for (int i = 0; i < edges.length; i++) {
            shootCnt[edges[i][0]]++;
            receiveCnt[edges[i][1]]++;
        }
        // 사용하지 않는 점 제거
        for (int i = 1; i <= 1000000; i++) {
            if (shootCnt[i] == 0 && receiveCnt[i] == 0) {
                shootCnt[i] = -1;
                receiveCnt[i] = -1;
            }
        }
        
        // 정점 찾기
        int totalGraphsNum = 0;
        int point = 0;
        for (int i = 1; i <= 1000000; i++) {
        	// Idea1 : 들어오는 선 없이 나오는 선이 2개 이상인 점이 정점이다.
            if (shootCnt[i] >= 2 && receiveCnt[i] == 0) {
                point = i;
                // Idea2 : 정점에서 나오는 선의 갯수가 전체 그래프의 수이다.
                totalGraphsNum = shootCnt[point];
            }
        }
        // 정점 제거
        shootCnt[point] = -1;
        receiveCnt[point] = -1;
        
        // 정점과 연결된 선 제거
        for (int i = 0; i < edges.length; i++) {
            if (edges[i][0] == point || edges[i][1] == point) {
                shootCnt[edges[i][0]]--;
                receiveCnt[edges[i][1]]--;

                edges[i][0] = 0;
                edges[i][1] = 0;
            }
        }
        
        int stickGraphsNum = 0;
        int eightGraphsNum = 0;
        for (int i = 1; i <= 1000000; i++) {
            // Idea3 : 정점과 정점에 연결된 선을 지우고 나서, 연결된 선이 없거나 들어오는 선이 하나고 나오는 선이 없는 정점의 갯수가 막대 모양 그래프의 갯수이다.
            if ((shootCnt[i] == 0 && receiveCnt[i] == 0) || 
                (shootCnt[i] == 0 && receiveCnt[i] == 1)) {
                stickGraphsNum++;
            }
            
            // Idea4 : 정점과 정점에 연결된 선을 지우고 나서, 나오는 선이 2개인 정점의 갯수가 8자 모양 그래프의 갯수이다.
            if (shootCnt[i] == 2) {
                eightGraphsNum++;
            }
        }
        // Idea5 : 전체 그래프의 수에서 막대 모양 그래프의 갯수와 8자 모양 그래프의 갯수를 빼면 도넛 모양 그래프의 갯수이다.
        int doughnutGraphsNum = totalGraphsNum - stickGraphsNum - eightGraphsNum;
        
        int[] answer = {point, doughnutGraphsNum, stickGraphsNum, eightGraphsNum};
        return answer;
    }
}

 

+ Recent posts