diff --git a/.gitignore b/.gitignore index 2a7c3a7..dd12c82 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,5 @@ bin/ build/** src/main/resources/application.properties + +**/**.iml \ No newline at end of file diff --git a/README.md b/README.md index cd7c688..1eb0a1a 100644 --- a/README.md +++ b/README.md @@ -2,21 +2,30 @@ # 알고리즘 - bfs - - [BFS 예시 코드](https://github.com/programofktw/AlgorithmStudy/pull/127) - - + - [BFS 코드 구현](https://github.com/programofktw/AlgorithmStudy/pull/127) + - 트리 BFS + - 2차원 배열 BFS + - 우선순위 bfs 정리 - dfs - - [DFS 예시 코드](https://github.com/programofktw/AlgorithmStudy/pull/134) + - [DFS 코드 구현](https://github.com/programofktw/AlgorithmStudy/pull/134) - pre, in, post Oder - - [전위 중위 후위 순회 예시 코드](https://github.com/programofktw/AlgorithmStudy/pull/136) + - [전위 중위 후위 순회 코드 구현](https://github.com/programofktw/AlgorithmStudy/pull/136) # 자료구조 ## List - AraryList + - [ArrayList 구현](https://github.com/programofktw/AlgorithmStudy/pull/123) - LinkedList ## Map - ListMap + - [ListMap 구현](https://github.com/programofktw/AlgorithmStudy/pull/131) + - HashMap - [HashMap 구현](https://github.com/programofktw/AlgorithmStudy/pull/135) + + + + diff --git a/algorithmStudy.iml b/algorithmStudy.iml deleted file mode 100644 index 245d342..0000000 --- a/algorithmStudy.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/build.gradle b/build.gradle deleted file mode 100644 index d9d4892..0000000 --- a/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -plugins { - id 'java' -} - -group 'org.example' -version '1.0' - -repositories { - mavenCentral() -} - -dependencies { - testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0' -} - -test { - useJUnitPlatform() -} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index a4b76b9..0000000 Binary files a/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 9355b41..0000000 --- a/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew deleted file mode 100644 index f5feea6..0000000 --- a/gradlew +++ /dev/null @@ -1,252 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat deleted file mode 100644 index 9d21a21..0000000 --- a/gradlew.bat +++ /dev/null @@ -1,94 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/src/.idea/.gitignore b/src/.idea/.gitignore new file mode 100644 index 0000000..c3f502a --- /dev/null +++ b/src/.idea/.gitignore @@ -0,0 +1,8 @@ +# 디폴트 무시된 파일 +/shelf/ +/workspace.xml +# 에디터 기반 HTTP 클라이언트 요청 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/src/.idea/misc.xml b/src/.idea/misc.xml new file mode 100644 index 0000000..07115cd --- /dev/null +++ b/src/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/.idea/modules.xml b/src/.idea/modules.xml new file mode 100644 index 0000000..23f37a8 --- /dev/null +++ b/src/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/.idea/vcs.xml b/src/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/src/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/baekjoon/baekJoon/BaekJoon1002.java b/src/baekjoon/baekJoon/BaekJoon1002.java similarity index 100% rename from src/main/java/baekjoon/baekJoon/BaekJoon1002.java rename to src/baekjoon/baekJoon/BaekJoon1002.java diff --git a/src/main/java/baekjoon/baekJoon/BaekJoon1003.java b/src/baekjoon/baekJoon/BaekJoon1003.java similarity index 100% rename from src/main/java/baekjoon/baekJoon/BaekJoon1003.java rename to src/baekjoon/baekJoon/BaekJoon1003.java diff --git a/src/main/java/baekjoon/baekJoon/BaekJoon1152.java b/src/baekjoon/baekJoon/BaekJoon1152.java similarity index 100% rename from src/main/java/baekjoon/baekJoon/BaekJoon1152.java rename to src/baekjoon/baekJoon/BaekJoon1152.java diff --git a/src/main/java/baekjoon/baekJoon/BaekJoon1237.java b/src/baekjoon/baekJoon/BaekJoon1237.java similarity index 100% rename from src/main/java/baekjoon/baekJoon/BaekJoon1237.java rename to src/baekjoon/baekJoon/BaekJoon1237.java diff --git a/src/main/java/baekjoon/baekJoon/BaekJoon1308.java b/src/baekjoon/baekJoon/BaekJoon1308.java similarity index 100% rename from src/main/java/baekjoon/baekJoon/BaekJoon1308.java rename to src/baekjoon/baekJoon/BaekJoon1308.java diff --git a/src/main/java/baekjoon/baekJoon/BaekJoon16719.java b/src/baekjoon/baekJoon/BaekJoon16719.java similarity index 100% rename from src/main/java/baekjoon/baekJoon/BaekJoon16719.java rename to src/baekjoon/baekJoon/BaekJoon16719.java diff --git a/src/main/java/baekjoon/baekJoon/BaekJoon2508.java b/src/baekjoon/baekJoon/BaekJoon2508.java similarity index 100% rename from src/main/java/baekjoon/baekJoon/BaekJoon2508.java rename to src/baekjoon/baekJoon/BaekJoon2508.java diff --git a/src/main/java/baekjoon/baekJoon/BaekJoon2668.java b/src/baekjoon/baekJoon/BaekJoon2668.java similarity index 100% rename from src/main/java/baekjoon/baekJoon/BaekJoon2668.java rename to src/baekjoon/baekJoon/BaekJoon2668.java diff --git a/src/main/java/baekjoon/baekJoon/BaekJoon9494.java b/src/baekjoon/baekJoon/BaekJoon9494.java similarity index 100% rename from src/main/java/baekjoon/baekJoon/BaekJoon9494.java rename to src/baekjoon/baekJoon/BaekJoon9494.java diff --git a/src/baekjoon/bronze/B10102.java b/src/baekjoon/bronze/B10102.java new file mode 100644 index 0000000..0c70865 --- /dev/null +++ b/src/baekjoon/bronze/B10102.java @@ -0,0 +1,56 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class B10102 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { +// br.readLine(); +// +// String st = br.readLine(); +// +// int total = st.length(); +// +// st = st.replace("A",""); +// +// int BNum = st.length(); +// +// double mid = (double)total/2; +// +// if(mid>BNum){ +// sb.append("A"); +// }else if(mid == BNum){ +// sb.append("Tie"); +// }else{ +// sb.append("B"); +// } +// +// System.out.print(sb); + br.readLine(); + + String s = br.readLine(); + + int count=0; + + for(int i =0;i0)?"A":"B"); + } + + System.out.print(sb); + } +} diff --git a/src/baekjoon/bronze/B1037.java b/src/baekjoon/bronze/B1037.java new file mode 100644 index 0000000..f5b9f4e --- /dev/null +++ b/src/baekjoon/bronze/B1037.java @@ -0,0 +1,43 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.PriorityQueue; + +public class B1037 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + int N = Integer.parseInt(br.readLine()); + + String[] inputs = br.readLine().split(" "); + + + long min = Long.MAX_VALUE; + + long max = Long.MIN_VALUE; + + for(String input : inputs){ + long now = Long.parseLong(input); + + if(min>now) min = now; + if(max=97){ + sb.append("A+"); + }else if(score>=90){ + sb.append("A"); + }else if(score>=87){ + sb.append("B+"); + }else if(score>=80){ + sb.append("B"); + }else if(score>=77){ + sb.append("C+"); + }else if(score>=70){ + sb.append("C"); + }else if(score>=67){ + sb.append("D+"); + }else if(score>=60){ + sb.append("D"); + }else{ + sb.append("F"); + } + sb.append("\n"); + + + } + + System.out.print(sb); + } + +} diff --git a/src/baekjoon/bronze/B11549.java b/src/baekjoon/bronze/B11549.java new file mode 100644 index 0000000..e5c18a9 --- /dev/null +++ b/src/baekjoon/bronze/B11549.java @@ -0,0 +1,30 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class B11549 { + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + int correct = Integer.parseInt(br.readLine()); + + StringTokenizer st = new StringTokenizer(br.readLine()); + + int result = 0; + + while (st.hasMoreTokens()) { + result += (correct==Integer.parseInt(st.nextToken()))?1:0; + } + + sb.append(result); + + System.out.print(sb); + } + + +} diff --git a/src/baekjoon/bronze/B11874.java b/src/baekjoon/bronze/B11874.java new file mode 100644 index 0000000..f4bc348 --- /dev/null +++ b/src/baekjoon/bronze/B11874.java @@ -0,0 +1,54 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B11874 { + + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + int L = Integer.parseInt(br.readLine()); + + int D = Integer.parseInt(br.readLine()); + + int X = Integer.parseInt(br.readLine()); + + boolean first = true; + + int max = 0; + + for (int i = L; i <=D;i++ ){ + if(X==sum(i)){ + if(first){ + sb.append(i); + first = false; + max = i; + }else{ + max = i; + } + } + } + + sb.append("\n").append(max); + + System.out.print(sb); + } + + + static int sum(int a){ + int result = 0; + + int na = 10000; + + while(true){ + result += a/na; + a = a%na; + na /= 10; + if(a==0) return result; + } + } +} diff --git a/src/baekjoon/bronze/B13420.java b/src/baekjoon/bronze/B13420.java new file mode 100644 index 0000000..92f1595 --- /dev/null +++ b/src/baekjoon/bronze/B13420.java @@ -0,0 +1,57 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B13420 { + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + int n = Integer.parseInt(br.readLine()); + + for(int i = 0; i < n; i++) { + String[] input = br.readLine().split(" "); + + long a = Long.parseLong(input[0]); + + char op = input[1].charAt(0); + + long b = Long.parseLong(input[2]); + + char equal = input[3].charAt(0); + + long result = Long.parseLong(input[4]); + + long exp = 0; + + switch(op){ + case '+': + exp = a+b; + break; + case '-' : + exp = a-b; + break; + case '*': + exp = a*b; + break; + case '/': + exp = a/b; + break; + } + + if(result == exp){ + sb.append("correct\n"); + }else{ + sb.append("wrong answer\n"); + } + + + } + + System.out.print(sb); + } +} diff --git a/src/baekjoon/bronze/B14656.java b/src/baekjoon/bronze/B14656.java new file mode 100644 index 0000000..922f8a6 --- /dev/null +++ b/src/baekjoon/bronze/B14656.java @@ -0,0 +1,33 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; + +public class B14656 { + + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + int n = Integer.parseInt(br.readLine()); + + int[] input = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); + + int result = 0; + + for(int i = 1 ; i <= n;i++){ + if(i!=input[i-1]) result++; + } + + sb.append(result); + + + System.out.print(sb); + } + + +} diff --git a/src/baekjoon/bronze/B15439.java b/src/baekjoon/bronze/B15439.java new file mode 100644 index 0000000..f1b6662 --- /dev/null +++ b/src/baekjoon/bronze/B15439.java @@ -0,0 +1,13 @@ +package baekjoon.bronze; + +import java.util.Scanner; + +public class B15439 { + public static void main(String[] args){ + Scanner sc = new Scanner(System.in); + int n = sc.nextInt(); + + System.out.print(n*(n-1)); + } + +} diff --git a/src/baekjoon/bronze/B15881.java b/src/baekjoon/bronze/B15881.java new file mode 100644 index 0000000..6a83824 --- /dev/null +++ b/src/baekjoon/bronze/B15881.java @@ -0,0 +1,45 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B15881 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + int n = Integer.parseInt(br.readLine()); + + String input = br.readLine(); + + char[] pPAp = {'p','P','A','p'}; + + int now = 0; + + int result =0; + + for(char cha : input.toCharArray()){ + if(cha==pPAp[now]){ + now++; + }else{ + if(cha==pPAp[0]) + now=1; + else + now=0; + } + + if(now==4){ + result++; + now=0; + } + } + + sb.append(result); + + System.out.print(sb); + } + +} diff --git a/src/baekjoon/bronze/B15953.java b/src/baekjoon/bronze/B15953.java new file mode 100644 index 0000000..2593dd8 --- /dev/null +++ b/src/baekjoon/bronze/B15953.java @@ -0,0 +1,56 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B15953 { + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + int N = Integer.parseInt(br.readLine()); + + for(int i=0;i=A&&i<=B){ + count++; + } + } + + if(count==0){ + sb.append("IMPOSSIBLE"); + }else{ + sb.append(count); + } + + System.out.print(sb); + + } + +} diff --git a/src/baekjoon/bronze/B3034.java b/src/baekjoon/bronze/B3034.java new file mode 100644 index 0000000..668c518 --- /dev/null +++ b/src/baekjoon/bronze/B3034.java @@ -0,0 +1,34 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B3034 { + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + String[] input = br.readLine().split(" "); + + int n = Integer.parseInt(input[0]); + int w = Integer.parseInt(input[1]); + int h = Integer.parseInt(input[2]); + + int max = w*w + h*h; + + for(int i = 0; i < n; i++) { + int x = Integer.parseInt(br.readLine()); + + if(max >= x*x){ + sb.append("DA").append("\n"); + }else{ + sb.append("NE").append("\n"); + } + + } + + System.out.print(sb); + } +} diff --git a/src/baekjoon/bronze/B30676.java b/src/baekjoon/bronze/B30676.java new file mode 100644 index 0000000..7b6098e --- /dev/null +++ b/src/baekjoon/bronze/B30676.java @@ -0,0 +1,34 @@ +package baekjoon.bronze; + +import java.util.Scanner; + +public class B30676 { + public static void main(String[] args){ + Scanner sc = new Scanner(System.in); + + int n = sc.nextInt(); + + if(n<=780&&n>=620){ + System.out.println("Red"); + } + else if(n<620&&n>=590){ + System.out.println("Orange"); + } + else if(n<590&&n>=570){ + System.out.println("Yellow"); + } + else if(n<570&&n>=495){ + System.out.println("Green"); + } + else if(n<495&&n>=450){ + System.out.println("Blue"); + } + else if(n<450&&n>=425){ + System.out.println("Indigo"); + } + else if(n<425&&n>=380){ + System.out.println("Violet"); + } + } + +} diff --git a/src/baekjoon/bronze/B31450.java b/src/baekjoon/bronze/B31450.java new file mode 100644 index 0000000..03fe56b --- /dev/null +++ b/src/baekjoon/bronze/B31450.java @@ -0,0 +1,17 @@ +package baekjoon.bronze; + +import java.util.Scanner; + +public class B31450 { + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + + int M = sc.nextInt(); + + int K = sc.nextInt(); + + System.out.print((M%K)==0?"Yes":"No"); + } + +} diff --git a/src/baekjoon/bronze/B31746.java b/src/baekjoon/bronze/B31746.java new file mode 100644 index 0000000..7794c88 --- /dev/null +++ b/src/baekjoon/bronze/B31746.java @@ -0,0 +1,25 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B31746 { + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + long n = Long.parseLong(br.readLine()); + + if(n%2==0){ + sb.append("SciComLove"); + }else{ + sb.append("evoLmoCicS"); + } + + System.out.print(sb); + } + + +} diff --git a/src/baekjoon/bronze/B33178.java b/src/baekjoon/bronze/B33178.java new file mode 100644 index 0000000..f4fe01d --- /dev/null +++ b/src/baekjoon/bronze/B33178.java @@ -0,0 +1,21 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B33178 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args)throws IOException { + int input = Integer.parseInt(br.readLine()); + + sb.append(input/10); + + + System.out.print(sb); + } + +} diff --git a/src/baekjoon/bronze/B34281.java b/src/baekjoon/bronze/B34281.java new file mode 100644 index 0000000..e051d2b --- /dev/null +++ b/src/baekjoon/bronze/B34281.java @@ -0,0 +1,21 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B34281 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + int w = Integer.parseInt(br.readLine()); + int h = Integer.parseInt(br.readLine()); + + sb.append(w*h); + + System.out.print(sb); + } + +} diff --git a/src/baekjoon/bronze/B34362.java b/src/baekjoon/bronze/B34362.java new file mode 100644 index 0000000..61fcd23 --- /dev/null +++ b/src/baekjoon/bronze/B34362.java @@ -0,0 +1,22 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B34362 { + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + double a = Double.parseDouble(br.readLine()); + + double result = a- 0.3; + + sb.append(result); + + System.out.print(sb); + } +} diff --git a/src/baekjoon/bronze/B34721.java b/src/baekjoon/bronze/B34721.java new file mode 100644 index 0000000..e451053 --- /dev/null +++ b/src/baekjoon/bronze/B34721.java @@ -0,0 +1,17 @@ +package baekjoon.bronze; + +import java.util.Scanner; + +public class B34721 { + public static void main(String[] args){ + Scanner scan = new Scanner(System.in); + + int i=scan.nextInt(); + + while(i-- != 0){ + System.out.println("I love DGU"); + } + + scan.close(); + } +} diff --git a/src/baekjoon/bronze/B34849.java b/src/baekjoon/bronze/B34849.java new file mode 100644 index 0000000..ae5b019 --- /dev/null +++ b/src/baekjoon/bronze/B34849.java @@ -0,0 +1,28 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B34849 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + long n = Long.parseLong(br.readLine()); + + long pow = n * n; + + if(pow<=100000000){ + sb.append("Accepted"); + }else{ + sb.append("Time limit exceeded"); + } + + + System.out.print(sb); + } + +} diff --git a/src/baekjoon/bronze/B34945.java b/src/baekjoon/bronze/B34945.java new file mode 100644 index 0000000..e214adb --- /dev/null +++ b/src/baekjoon/bronze/B34945.java @@ -0,0 +1,22 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B34945 { + + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + int N = Integer.parseInt(br.readLine()); + + sb.append((N>=6)?"Success!":"Oh My God!"); + + System.out.print(sb); + } + + +} diff --git a/src/baekjoon/bronze/B3533.java b/src/baekjoon/bronze/B3533.java new file mode 100644 index 0000000..8e99069 --- /dev/null +++ b/src/baekjoon/bronze/B3533.java @@ -0,0 +1,44 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class B3533 { + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + String[] input = br.readLine().split(" "); + + boolean[] bit = new boolean[10]; + + for(int i = 0; i < bit.length; i++){ + bit[i] = input[i].equals("1"); + } + + boolean result = false; + + for(int i= 0; i < bit.length; i++){ + boolean temp; + for(int j = i+1 ; j < bit.length ; j++){ + temp = bit[i] || bit[j]; + + result = (temp&&!result ||!temp&&result); + + for(int k = j+1 ; k < bit.length ;k++){ + temp = bit[i]||bit[j] || bit[k]; + + result = (temp&&!result ||!temp&&result); + } + } + } + + sb.append(result?1:0); + + System.out.println(sb); + } + +} diff --git a/src/baekjoon/bronze/B4619.java b/src/baekjoon/bronze/B4619.java new file mode 100644 index 0000000..4f35379 --- /dev/null +++ b/src/baekjoon/bronze/B4619.java @@ -0,0 +1,39 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; + +public class B4619 { + + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + + while(true){ + int[] input = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); + if(input[0] ==0 && input[1]==0) break; + + int i = 0; + + while(Math.pow(i,input[1])input[0]-Math.pow((i-1),input[1])){ + i--; + } + sb.append(i).append("\n"); + } + + + + System.out.print(sb); + } + + +} diff --git a/src/baekjoon/bronze/B5074.java b/src/baekjoon/bronze/B5074.java new file mode 100644 index 0000000..07cc0d6 --- /dev/null +++ b/src/baekjoon/bronze/B5074.java @@ -0,0 +1,59 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B5074 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + while(true){ + String[] inputs = br.readLine().split(" "); + + if(inputs[0].equals("00:00")&&inputs[1].equals("00:00")) break; + + String[] first = inputs[0].split(":"); + + String[] second = inputs[1].split(":"); + + int h1 = Integer.parseInt(first[0]); + int m1 = Integer.parseInt(first[1]); + + int h2 = Integer.parseInt(second[0]); + int m2 = Integer.parseInt(second[1]); + + int rh = 0; + int rm =0; + + rh = h1 + h2; + rm = m2 + m1; + + boolean overDay = false; + + if(rm>=60){ + rh++; + rm-=60; + } + + int day =0; + + + if(rh>=24){ + overDay= true; + day = rh / 24; + rh %= 24; + + } + + sb.append(String.format("%02d",rh)).append(":").append(String.format("%02d",rm)).append((overDay)?" +"+day:"").append("\n"); + } + + + System.out.print(sb); + } + +} diff --git a/src/baekjoon/bronze/B5358.java b/src/baekjoon/bronze/B5358.java new file mode 100644 index 0000000..a0db2c3 --- /dev/null +++ b/src/baekjoon/bronze/B5358.java @@ -0,0 +1,39 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B5358 { + + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + int iegap = 'i'-'e'; + + while(true){ + String input = br.readLine(); + + if(input==null){ + break; + } + + for(char now : input.toCharArray()){ + if(now == 'i' || now == 'I'){ + sb.append((char)(now-iegap)); + }else if(now=='e'||now=='E'){ + sb.append(((char)(now+iegap))); + }else{ + sb.append(now); + } + } + sb.append("\n"); + } + + System.out.print(sb); + } + +} diff --git a/src/baekjoon/bronze/B6996.java b/src/baekjoon/bronze/B6996.java new file mode 100644 index 0000000..e5acdb4 --- /dev/null +++ b/src/baekjoon/bronze/B6996.java @@ -0,0 +1,44 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B6996 { + + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + int testCase = Integer.parseInt(br.readLine()); + + A : for(int i = 0; i < testCase; i++) { + String[] input = br.readLine().split(" "); + int size = 'z' - 'a'+1; + int[] arr1 = new int[size]; + int[] arr2 = new int[size]; + sb.append(input[0]).append(" & ").append(input[1]).append(" are "); + boolean result = false; + + for(char ch : input[0].toCharArray()) { + arr1[ch - 'a']++; + } + + for(char ch : input[1].toCharArray()) { + arr2[ch- 'a']++; + } + + for(int j = 0 ; j < size;j++){ + if(arr1[j]!=arr2[j]){ + sb.append("NOT anagrams.").append("\n"); + continue A; + } + } + sb.append("anagrams.").append("\n"); + } + + System.out.print(sb); + } +} diff --git a/src/baekjoon/bronze/B9316.java b/src/baekjoon/bronze/B9316.java new file mode 100644 index 0000000..3bd159f --- /dev/null +++ b/src/baekjoon/bronze/B9316.java @@ -0,0 +1,23 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B9316 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + int n = Integer.parseInt(br.readLine()); + + for(int i = 1 ;i<=n;i++){ + sb.append(String.format("Hello World, Judge %d!",i)).append("\n"); + } + + System.out.print(sb); + } + +} diff --git a/src/main/java/baekjoon/bronze/BackJoon15740.java b/src/baekjoon/bronze/BackJoon15740.java similarity index 100% rename from src/main/java/baekjoon/bronze/BackJoon15740.java rename to src/baekjoon/bronze/BackJoon15740.java diff --git a/src/baekjoon/bronze/BaekJoo21300.java b/src/baekjoon/bronze/BaekJoo21300.java new file mode 100644 index 0000000..09527b3 --- /dev/null +++ b/src/baekjoon/bronze/BaekJoo21300.java @@ -0,0 +1,16 @@ +package baekjoon.bronze; + +import java.util.Scanner; + +public class BaekJoo21300 { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + int result = 0; + for (int i = 0; i < 6; i++) { + result += scanner.nextInt(); + } + + System.out.print(result * 5); + } +} diff --git a/src/main/java/baekjoon/bronze/BaekJoon1009.java b/src/baekjoon/bronze/BaekJoon1009.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon1009.java rename to src/baekjoon/bronze/BaekJoon1009.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon10170.java b/src/baekjoon/bronze/BaekJoon10170.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon10170.java rename to src/baekjoon/bronze/BaekJoon10170.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon1032.java b/src/baekjoon/bronze/BaekJoon1032.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon1032.java rename to src/baekjoon/bronze/BaekJoon1032.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon10757.java b/src/baekjoon/bronze/BaekJoon10757.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon10757.java rename to src/baekjoon/bronze/BaekJoon10757.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon10807.java b/src/baekjoon/bronze/BaekJoon10807.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon10807.java rename to src/baekjoon/bronze/BaekJoon10807.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon10872.java b/src/baekjoon/bronze/BaekJoon10872.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon10872.java rename to src/baekjoon/bronze/BaekJoon10872.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon10984.java b/src/baekjoon/bronze/BaekJoon10984.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon10984.java rename to src/baekjoon/bronze/BaekJoon10984.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon11021.java b/src/baekjoon/bronze/BaekJoon11021.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon11021.java rename to src/baekjoon/bronze/BaekJoon11021.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon11022.java b/src/baekjoon/bronze/BaekJoon11022.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon11022.java rename to src/baekjoon/bronze/BaekJoon11022.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon11117.java b/src/baekjoon/bronze/BaekJoon11117.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon11117.java rename to src/baekjoon/bronze/BaekJoon11117.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon11718.java b/src/baekjoon/bronze/BaekJoon11718.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon11718.java rename to src/baekjoon/bronze/BaekJoon11718.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon11942.java b/src/baekjoon/bronze/BaekJoon11942.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon11942.java rename to src/baekjoon/bronze/BaekJoon11942.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon1231231231.java b/src/baekjoon/bronze/BaekJoon1231231231.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon1231231231.java rename to src/baekjoon/bronze/BaekJoon1231231231.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon1236.java b/src/baekjoon/bronze/BaekJoon1236.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon1236.java rename to src/baekjoon/bronze/BaekJoon1236.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon12595.java b/src/baekjoon/bronze/BaekJoon12595.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon12595.java rename to src/baekjoon/bronze/BaekJoon12595.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon13228.java b/src/baekjoon/bronze/BaekJoon13228.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon13228.java rename to src/baekjoon/bronze/BaekJoon13228.java diff --git a/src/baekjoon/bronze/BaekJoon13416.java b/src/baekjoon/bronze/BaekJoon13416.java new file mode 100644 index 0000000..26d622e --- /dev/null +++ b/src/baekjoon/bronze/BaekJoon13416.java @@ -0,0 +1,41 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class BaekJoon13416 { + + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + public static void main(String[] args) throws IOException { + int testCase = Integer.parseInt(br.readLine()); + StringBuilder sb = new StringBuilder(); + + + for(int i =0;i=0) + result += max; + + } + + sb.append(result).append("\n"); + } + System.out.print(sb); + + } +} diff --git a/src/main/java/baekjoon/bronze/BaekJoon14456.java b/src/baekjoon/bronze/BaekJoon14456.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon14456.java rename to src/baekjoon/bronze/BaekJoon14456.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon14491.java b/src/baekjoon/bronze/BaekJoon14491.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon14491.java rename to src/baekjoon/bronze/BaekJoon14491.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon14645.java b/src/baekjoon/bronze/BaekJoon14645.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon14645.java rename to src/baekjoon/bronze/BaekJoon14645.java diff --git a/src/baekjoon/bronze/BaekJoon14647.java b/src/baekjoon/bronze/BaekJoon14647.java new file mode 100644 index 0000000..39e5af1 --- /dev/null +++ b/src/baekjoon/bronze/BaekJoon14647.java @@ -0,0 +1,51 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class BaekJoon14647 { + + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + StringTokenizer st = new StringTokenizer(br.readLine()); + + int n = Integer.parseInt(st.nextToken()); + int m = Integer.parseInt(st.nextToken()); + + int[][] arr = new int[n][m]; + + int total9num = 0; + int[] rowCount = new int[n]; + int[] colCount = new int[m]; + + // 입력 및 9 카운팅 + for (int i = 0; i < n; i++) { + st = new StringTokenizer(br.readLine()); + for (int j = 0; j < m; j++) { + String s = st.nextToken(); + arr[i][j] = Integer.parseInt(s); + + // 9의 개수 세기 + for (char c : s.toCharArray()) { + if (c == '9') { + total9num++; + rowCount[i]++; + colCount[j]++; + } + } + } + } + + // 최대 9 개수 찾기 (행/열) + int max9Num = 0; + for (int r : rowCount) max9Num = Math.max(max9Num, r); + for (int c : colCount) max9Num = Math.max(max9Num, c); + + System.out.println(total9num - max9Num); + } +} diff --git a/src/main/java/baekjoon/bronze/BaekJoon14928.java b/src/baekjoon/bronze/BaekJoon14928.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon14928.java rename to src/baekjoon/bronze/BaekJoon14928.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon15000.java b/src/baekjoon/bronze/BaekJoon15000.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon15000.java rename to src/baekjoon/bronze/BaekJoon15000.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon15115.java b/src/baekjoon/bronze/BaekJoon15115.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon15115.java rename to src/baekjoon/bronze/BaekJoon15115.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon15232.java b/src/baekjoon/bronze/BaekJoon15232.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon15232.java rename to src/baekjoon/bronze/BaekJoon15232.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon1551.java b/src/baekjoon/bronze/BaekJoon1551.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon1551.java rename to src/baekjoon/bronze/BaekJoon1551.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon15552.java b/src/baekjoon/bronze/BaekJoon15552.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon15552.java rename to src/baekjoon/bronze/BaekJoon15552.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon15680.java b/src/baekjoon/bronze/BaekJoon15680.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon15680.java rename to src/baekjoon/bronze/BaekJoon15680.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon15700.java b/src/baekjoon/bronze/BaekJoon15700.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon15700.java rename to src/baekjoon/bronze/BaekJoon15700.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon15727.java b/src/baekjoon/bronze/BaekJoon15727.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon15727.java rename to src/baekjoon/bronze/BaekJoon15727.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon15733.java b/src/baekjoon/bronze/BaekJoon15733.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon15733.java rename to src/baekjoon/bronze/BaekJoon15733.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon15917.java b/src/baekjoon/bronze/BaekJoon15917.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon15917.java rename to src/baekjoon/bronze/BaekJoon15917.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon15962.java b/src/baekjoon/bronze/BaekJoon15962.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon15962.java rename to src/baekjoon/bronze/BaekJoon15962.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon15963.java b/src/baekjoon/bronze/BaekJoon15963.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon15963.java rename to src/baekjoon/bronze/BaekJoon15963.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon15964.java b/src/baekjoon/bronze/BaekJoon15964.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon15964.java rename to src/baekjoon/bronze/BaekJoon15964.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon16170.java b/src/baekjoon/bronze/BaekJoon16170.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon16170.java rename to src/baekjoon/bronze/BaekJoon16170.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon16394.java b/src/baekjoon/bronze/BaekJoon16394.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon16394.java rename to src/baekjoon/bronze/BaekJoon16394.java diff --git a/src/baekjoon/bronze/BaekJoon16972.java b/src/baekjoon/bronze/BaekJoon16972.java new file mode 100644 index 0000000..02bd18e --- /dev/null +++ b/src/baekjoon/bronze/BaekJoon16972.java @@ -0,0 +1,27 @@ +package baekjoon.bronze; + +import java.util.HashSet; +import java.util.Set; + +public class BaekJoon16972 { + public static void main(String[] args) { + int count = 814; + int min = -8140; + int max = 8140; + int range = max - min + 1; + + Set pairs = new HashSet<>(); + + while (pairs.size() < count) { + int a = (int)(Math.random() * range) + min; + int b = (int)(Math.random() * range) + min; + String pair = a + "," + b; // 쌍을 문자열로 표현 + pairs.add(pair); + } + + // 출력 + for (String pair : pairs) { + System.out.println(pair.replace(",", " ")); + } + } +} diff --git a/src/baekjoon/bronze/BaekJoon20215.java b/src/baekjoon/bronze/BaekJoon20215.java new file mode 100644 index 0000000..776c17f --- /dev/null +++ b/src/baekjoon/bronze/BaekJoon20215.java @@ -0,0 +1,27 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class BaekJoon20215 { + + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + StringTokenizer st = new StringTokenizer(br.readLine()); + + int w = Integer.parseInt(st.nextToken()); + + int h = Integer.parseInt(st.nextToken()); + + int sq = w + h; + + double dagak = Math.sqrt(Math.pow(w,2)+Math.pow(h,2)); + + System.out.printf("%.6f", sq-dagak); + } +} diff --git a/src/main/java/baekjoon/bronze/BaekJoon20492.java b/src/baekjoon/bronze/BaekJoon20492.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon20492.java rename to src/baekjoon/bronze/BaekJoon20492.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon2083.java b/src/baekjoon/bronze/BaekJoon2083.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon2083.java rename to src/baekjoon/bronze/BaekJoon2083.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon21623.java b/src/baekjoon/bronze/BaekJoon21623.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon21623.java rename to src/baekjoon/bronze/BaekJoon21623.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon2163.java b/src/baekjoon/bronze/BaekJoon2163.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon2163.java rename to src/baekjoon/bronze/BaekJoon2163.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon23080.java b/src/baekjoon/bronze/BaekJoon23080.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon23080.java rename to src/baekjoon/bronze/BaekJoon23080.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon2393.java b/src/baekjoon/bronze/BaekJoon2393.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon2393.java rename to src/baekjoon/bronze/BaekJoon2393.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon2446.java b/src/baekjoon/bronze/BaekJoon2446.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon2446.java rename to src/baekjoon/bronze/BaekJoon2446.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon24603.java b/src/baekjoon/bronze/BaekJoon24603.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon24603.java rename to src/baekjoon/bronze/BaekJoon24603.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon24736.java b/src/baekjoon/bronze/BaekJoon24736.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon24736.java rename to src/baekjoon/bronze/BaekJoon24736.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon24751.java b/src/baekjoon/bronze/BaekJoon24751.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon24751.java rename to src/baekjoon/bronze/BaekJoon24751.java diff --git a/src/baekjoon/bronze/BaekJoon2522.java b/src/baekjoon/bronze/BaekJoon2522.java new file mode 100644 index 0000000..7035c7b --- /dev/null +++ b/src/baekjoon/bronze/BaekJoon2522.java @@ -0,0 +1,27 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class BaekJoon2522 { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int n = Integer.parseInt(br.readLine()); + + StringBuilder sb = new StringBuilder(); + + // 위쪽 삼각형 + for (int i = 1; i <= n; i++) { + sb.append(" ".repeat(n - i)).append("*".repeat(i)).append("\n"); + } + + // 아래쪽 삼각형 + for (int i = n - 1; i >= 1; i--) { + sb.append(" ".repeat(n - i)).append("*".repeat(i)).append("\n"); + } + + System.out.print(sb); + } +} \ No newline at end of file diff --git a/src/main/java/baekjoon/bronze/BaekJoon2525.java b/src/baekjoon/bronze/BaekJoon2525.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon2525.java rename to src/baekjoon/bronze/BaekJoon2525.java diff --git a/src/baekjoon/bronze/BaekJoon25815.java b/src/baekjoon/bronze/BaekJoon25815.java new file mode 100644 index 0000000..7589fc3 --- /dev/null +++ b/src/baekjoon/bronze/BaekJoon25815.java @@ -0,0 +1,73 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class BaekJoon25815 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + StringTokenizer st = new StringTokenizer(br.readLine()); + int catYear = Integer.parseInt(st.nextToken()); + int catMonth = Integer.parseInt(st.nextToken()); + + int humanY =0; + int humanM =0; + + int count = 0; + + + + //1년 이상인 경우 + while(catYear!=0){ + if(count==0){ + humanY += CatToHuman.FIRST.human; + catYear--; + count++; + } + else if(count==1){ + humanY += CatToHuman.SECOND.human; + catYear--; + count++; + } + else if(count==2){ + humanY += catYear * CatToHuman.OVER.human; + catYear=0; + } + } + + if(count==0){ + humanM = catMonth * CatToHuman.FIRST.human; + }else if(count ==1){ + humanM = catMonth * CatToHuman.SECOND.human; + }else if(count == 2){ + humanM = catMonth * CatToHuman.OVER.human; + } + humanY += humanM / 12; + humanM = humanM % 12; + + System.out.print(humanY + " " + humanM); + + } + + + enum CatToHuman{ + + FIRST(1,15), + SECOND(1, 9), + OVER(1,4); + + CatToHuman(int cat, int human) { + this.cat = cat; + this.human = human; + } + + final int cat; + final int human; + + } +} diff --git a/src/main/java/baekjoon/bronze/BaekJoon25841.java b/src/baekjoon/bronze/BaekJoon25841.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon25841.java rename to src/baekjoon/bronze/BaekJoon25841.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon26489.java b/src/baekjoon/bronze/BaekJoon26489.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon26489.java rename to src/baekjoon/bronze/BaekJoon26489.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon2738.java b/src/baekjoon/bronze/BaekJoon2738.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon2738.java rename to src/baekjoon/bronze/BaekJoon2738.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon2743.java b/src/baekjoon/bronze/BaekJoon2743.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon2743.java rename to src/baekjoon/bronze/BaekJoon2743.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon2744.java b/src/baekjoon/bronze/BaekJoon2744.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon2744.java rename to src/baekjoon/bronze/BaekJoon2744.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon2754.java b/src/baekjoon/bronze/BaekJoon2754.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon2754.java rename to src/baekjoon/bronze/BaekJoon2754.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon28281.java b/src/baekjoon/bronze/BaekJoon28281.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon28281.java rename to src/baekjoon/bronze/BaekJoon28281.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon2947.java b/src/baekjoon/bronze/BaekJoon2947.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon2947.java rename to src/baekjoon/bronze/BaekJoon2947.java diff --git a/src/main/java/baekjoon/bronze/BaekJoon29751.java b/src/baekjoon/bronze/BaekJoon29751.java similarity index 100% rename from src/main/java/baekjoon/bronze/BaekJoon29751.java rename to src/baekjoon/bronze/BaekJoon29751.java diff --git a/src/baekjoon/bronze/BaekJoon30007.java b/src/baekjoon/bronze/BaekJoon30007.java new file mode 100644 index 0000000..3ddcc75 --- /dev/null +++ b/src/baekjoon/bronze/BaekJoon30007.java @@ -0,0 +1,27 @@ +package baekjoon.bronze; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class BaekJoon30007 { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + int N = Integer.parseInt(br.readLine()); + + for(int i= 0 ; i= 0; i--) { + LDS[i] = 1; + for (int j = n - 1; j > i; j--) { + if (array[j] < array[i]) LDS[i] = Math.max(LDS[i], LDS[j] + 1); + } + } + + int answer = 0; + + for(int i = 0 ; i lastNum){ + //다음 수가 작은 수여야할 경우 근데 큼 그냥 패스 + if(isReverse){ + max = Math.max(dfs(array, index+1,length,lastNum,isReverse),max); + } + //다음 수가 큰 수여야할 경우, 근데 큼, 포함하거나 말거나 + else{ + //포함하거나 + max = Math.max(dfs(array, index+1,length+1,array[index],isReverse),max); + //포함하지 않거나 + max = Math.max(dfs(array,index+1,length,lastNum,isReverse),max); + } + //다음 수가 작은 상황 + }else if(array[index] < lastNum){ + //다음 수가 작아야하는 상황 근데 작음 포함하거나 말거나 + if(isReverse){ + //포함하거나 + max = Math.max(dfs(array, index+1,length+1,array[index],isReverse),max); + //포함하지 않거나 + max = Math.max(dfs(array,index+1,length,lastNum,isReverse),max); + } + //다음수가 커야하는 상황 근데 작음 그럼 reverse를 돌려보서 포함하거나 패스하거나 + else{ + //리버스를 돌려서 포함하거나 + max = Math.max(dfs(array, index+1,length+1,array[index],!isReverse),max); + //포함하지 않거나 + max = Math.max(dfs(array,index+1,length,lastNum,isReverse),max); + } + //같은 경우 그냥 패스 + }else{ + max = Math.max(dfs(array, index+1,length,lastNum,isReverse),max); + } + + return max; + } +} diff --git a/src/main/java/baekjoon/class4/BaekJoon11404.java b/src/baekjoon/class4/BaekJoon11404.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon11404.java rename to src/baekjoon/class4/BaekJoon11404.java diff --git a/src/main/java/baekjoon/class4/BaekJoon11444.java b/src/baekjoon/class4/BaekJoon11444.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon11444.java rename to src/baekjoon/class4/BaekJoon11444.java diff --git a/src/main/java/baekjoon/class4/BaekJoon1149.java b/src/baekjoon/class4/BaekJoon1149.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon1149.java rename to src/baekjoon/class4/BaekJoon1149.java diff --git a/src/main/java/baekjoon/class4/BaekJoon11660.java b/src/baekjoon/class4/BaekJoon11660.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon11660.java rename to src/baekjoon/class4/BaekJoon11660.java diff --git a/src/baekjoon/class4/BaekJoon1167.java b/src/baekjoon/class4/BaekJoon1167.java new file mode 100644 index 0000000..b9503d5 --- /dev/null +++ b/src/baekjoon/class4/BaekJoon1167.java @@ -0,0 +1,122 @@ +package baekjoon.class4; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + +public class BaekJoon1167 { + + /* + 트리의 지름 문제인데 이전과 다른 점으로는 + 입력이 간선 하나씩이 아닌 특정 노드에 연결된 모든 노드들로 부터 이루어지는 차이가 존재 + 입력 다른것만 처리해주면 될 것으로 예상. + */ + + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static Map> graph = new HashMap<>(); + + public static void main(String[] args) throws IOException { + int n = Integer.parseInt(br.readLine()); + + init(n); + + input(n); + + System.out.print(searchResult()); + } + + static void init(int n){ + for(int i=1;i<=n;i++){ + graph.put(i,new ArrayList<>()); + } + } + + static void input(int n) throws IOException { + for(int i = 0;i queue = new LinkedList<>(); + + boolean[] visited = new boolean[graph.size()+1]; + queue.add(new Node(1,0)); + int farNode = 1; + int max = 0; + while(!queue.isEmpty()){ + Node nowNode = queue.poll(); + if(visited[nowNode.num]) continue; + else{ + List linkNodes = graph.get(nowNode.num); + for(Node linkNode : linkNodes){ + if(visited[linkNode.num]) continue; + else{ + queue.add(new Node(linkNode.num, linkNode.weight+ nowNode.weight)); + } + } + visited[nowNode.num] = true; + if(max < nowNode.weight){ + max = nowNode.weight; + farNode = nowNode.num; + } + } + } + return farNode; + } + + static int di(int i){ + Queue queue = new LinkedList<>(); + + boolean[] visited = new boolean[graph.size()+1]; + queue.add(new Node(i,0)); + int max = 0; + while(!queue.isEmpty()){ + Node nowNode = queue.poll(); + if(visited[nowNode.num]) continue; + else{ + List linkNodes = graph.get(nowNode.num); + for(Node linkNode : linkNodes){ + if(visited[linkNode.num]) continue; + else{ + queue.add(new Node(linkNode.num, linkNode.weight+ nowNode.weight)); + } + } + visited[nowNode.num] = true; + if(max < nowNode.weight){ + max = nowNode.weight; + } + } + } + return max; + + } + + static class Node{ + int num; + int weight; + + Node(int num, int weight){ + this.num = num; + this.weight = weight; + } + } + +} diff --git a/src/main/java/baekjoon/class4/BaekJoon11725.java b/src/baekjoon/class4/BaekJoon11725.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon11725.java rename to src/baekjoon/class4/BaekJoon11725.java diff --git a/src/main/java/baekjoon/class4/BaekJoon1238.java b/src/baekjoon/class4/BaekJoon1238.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon1238.java rename to src/baekjoon/class4/BaekJoon1238.java diff --git a/src/baekjoon/class4/BaekJoon12851.java b/src/baekjoon/class4/BaekJoon12851.java new file mode 100644 index 0000000..30c7e31 --- /dev/null +++ b/src/baekjoon/class4/BaekJoon12851.java @@ -0,0 +1,95 @@ +package baekjoon.class4; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + +//1회차 메모리 초과 +//시도 변경 dp 대신 bfs를 하되 add 하기전 time이 minTime 보다 큰지 확인. +//Periority Queue -> Queue 변경 : 시간복잡도는 좀 버려도 공간 복잡도 살려보기 +public class BaekJoon12851 { + + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + StringTokenizer st = new StringTokenizer(br.readLine()); + + + int from = Integer.parseInt(st.nextToken()); + + int to = Integer.parseInt(st.nextToken()); + + if(from>=to){ + System.out.println(from-to); + System.out.println(1); + return; + } + + bfs(from, to); + + } + + private static void bfs(int from, int to) { + + int MAX = 100000; + int[] visited = new int[MAX + 1]; // -1이면 방문 안함, 아니면 방문 시간 기록 + + Arrays.fill(visited, -1); + + Queue queue = new LinkedList<>(); + queue.add(from); + visited[from] = 0; + + int minTime = Integer.MAX_VALUE; + int count = 0; + + while (!queue.isEmpty()) { + int now = queue.poll(); + + int time = visited[now]; + + //목적지에 도착 + if (now == to) { + if (time < minTime) { + minTime = time; + count = 1; + } else if (time == minTime) { + count++; + } + continue; + } + + //최소 시간보다도 클때 + if (time + 1 > minTime) continue; + + int[] next = {now - 1, now + 1, now * 2}; + + for (int nx : next) { + if (nx < 0 || nx > MAX) continue; + + //아직 방문을 하지 않았거나 또 방문을 했는 데 시간이 같다(같은 시간에 다른 경로로 왔다) + if (visited[nx] == -1 || visited[nx] == time + 1) { + visited[nx] = time + 1; + queue.add(nx); + } + } + } + System.out.println(minTime); + System.out.println(count); + } + + static class Node{ + int X; + + + int time; + + Node(int X, int time){ + this.X = X; + this.time = time; + } + } +} diff --git a/src/main/java/baekjoon/class4/BaekJoon12865.java b/src/baekjoon/class4/BaekJoon12865.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon12865.java rename to src/baekjoon/class4/BaekJoon12865.java diff --git a/src/main/java/baekjoon/class4/BaekJoon13549.java b/src/baekjoon/class4/BaekJoon13549.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon13549.java rename to src/baekjoon/class4/BaekJoon13549.java diff --git a/src/baekjoon/class4/BaekJoon1504.java b/src/baekjoon/class4/BaekJoon1504.java new file mode 100644 index 0000000..ca10c43 --- /dev/null +++ b/src/baekjoon/class4/BaekJoon1504.java @@ -0,0 +1,155 @@ +package baekjoon.class4; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + +public class BaekJoon1504 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + static Map> graph = new HashMap<>(); + + static int[][] distances; + + public static void main(String[] args) throws IOException { + StringTokenizer st = new StringTokenizer(br.readLine()); + + //Node 개수 + int N = Integer.parseInt(st.nextToken()); + + //간선 개수 + int E = Integer.parseInt(st.nextToken()); + + // 0 : 1 ~ + // 1 : v1 ~ + // 2 : v2 ~ + distances = new int[3][N+1]; + + for(int i = 0 ; i < 3;i++) + Arrays.fill(distances[i],-1); + + for(int i = 1; i <=N ;i++){ + graph.put(i,new ArrayList<>()); + } + + for(int i =0 ; i < E; i++){ + st = new StringTokenizer(br.readLine()); + + int start = Integer.parseInt(st.nextToken()); + + int end = Integer.parseInt(st.nextToken()); + + int cost = Integer.parseInt(st.nextToken()); + + graph.get(start).add(new Node(start, end, cost)); + graph.get(end).add(new Node(end, start, cost)); + } + + st = new StringTokenizer(br.readLine()); + + int v1 = Integer.parseInt(st.nextToken()); + + int v2 = Integer.parseInt(st.nextToken()); + + bfs(1,0); + bfs(v1,1); + bfs(v2,2); + + + if(distances[1][N] == -1 || distances[2][N]==-1){ + System.out.print(-1); + }else{ + int mid1 = distances[1][v2]; + int mid2 = distances[1][1] + distances[1][v2]; + + int midResult = Math.min(mid1,mid2); + + int edge1 = distances[0][v1] + distances[2][N]; + + int edge2 = distances[0][v2] + distances[1][N]; + + int edgeResult = Math.min(edge1,edge2); + + System.out.print(midResult + edgeResult); + } + + + + //경우의 수 + //1. 1 -> v1 -> v2 -> + //2. 1 -> v2 -> v1 -> N + //3. 1 -> v1 -> 1 -> v2 -> N + //4. 1 -> v2 -> 1 -> v1 -> N + + + + } + + static void bfs(int baseNode, int key){ + PriorityQueue queue = new PriorityQueue<>( + Comparator.comparingInt(o -> o.cost) + ); + + + // 시작점 거리 0으로 설정 + distances[key][baseNode] = 0; + queue.add(new Node(baseNode, baseNode, 0)); + + + while(!queue.isEmpty()){ + Node now = queue.poll(); + + if (distances[key][now.end] < now.cost) continue; + + for(Node next : graph.get(now.end)){ + int newCost = now.cost + next.cost; + + if (distances[key][next.end] == -1 || distances[key][next.end] > newCost) { + distances[key][next.end] = newCost; + queue.add(new Node(now.end, next.end, newCost)); + } + } + } + } + + static void dijkstra(int baseNode, int key) { + PriorityQueue queue = new PriorityQueue<>( + Comparator.comparingInt(o -> o.cost) + ); + + // 시작점 거리 0으로 설정 + distances[key][baseNode] = 0; + queue.add(new Node(baseNode, baseNode, 0)); + + while (!queue.isEmpty()) { + Node now = queue.poll(); + + // 이미 더 짧은 경로가 있으면 스킵 + if (distances[key][now.end] < now.cost) continue; + + for (Node next : graph.get(now.end)) { + int newCost = now.cost + next.cost; + if (distances[key][next.end] == -1 || distances[key][next.end] > newCost) { + distances[key][next.end] = newCost; + queue.add(new Node(now.end, next.end, newCost)); + } + } + } + } + + + static class Node{ + int start; + int end; + int cost; + + public Node(int x, int y, int cost) { + this.start = x; + this.end = y; + this.cost = cost; + } + } +} diff --git a/src/main/java/baekjoon/class4/BaekJoon15650.java b/src/baekjoon/class4/BaekJoon15650.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon15650.java rename to src/baekjoon/class4/BaekJoon15650.java diff --git a/src/main/java/baekjoon/class4/BaekJoon15652.java b/src/baekjoon/class4/BaekJoon15652.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon15652.java rename to src/baekjoon/class4/BaekJoon15652.java diff --git a/src/main/java/baekjoon/class4/BaekJoon15654.java b/src/baekjoon/class4/BaekJoon15654.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon15654.java rename to src/baekjoon/class4/BaekJoon15654.java diff --git a/src/main/java/baekjoon/class4/BaekJoon15663.java b/src/baekjoon/class4/BaekJoon15663.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon15663.java rename to src/baekjoon/class4/BaekJoon15663.java diff --git a/src/main/java/baekjoon/class4/BaekJoon15666.java b/src/baekjoon/class4/BaekJoon15666.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon15666.java rename to src/baekjoon/class4/BaekJoon15666.java diff --git a/src/main/java/baekjoon/class4/BaekJoon16953.java b/src/baekjoon/class4/BaekJoon16953.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon16953.java rename to src/baekjoon/class4/BaekJoon16953.java diff --git a/src/baekjoon/class4/BaekJoon17070.java b/src/baekjoon/class4/BaekJoon17070.java new file mode 100644 index 0000000..80c9063 --- /dev/null +++ b/src/baekjoon/class4/BaekJoon17070.java @@ -0,0 +1,98 @@ +package baekjoon.class4; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class BaekJoon17070 { + + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + static boolean[][] field; + + public static void main(String[] args) throws IOException { + int n = Integer.parseInt(br.readLine()); + + field = new boolean[n][n]; + + StringTokenizer st ; + + for(int i = 0;i 가로, 대각선 + if (canRightMove(x,y,n)) { + gdp[y][x + 1] += gdp[y][x]; // 가로 유지 + gdp[y][x + 1] += cdp[y][x]; // 대각선에서 가로 + } + + // 세로 -> 세로, 대각선 + if (canDownMove(x,y,n)) { + sdp[y + 1][x] += sdp[y][x]; // 세로 유지 + sdp[y + 1][x] += cdp[y][x]; // 대각선에서 세로 + } + + // 대각선 -> 가로/세로/대각선 + if (canCrossMove(x,y,n)) { + cdp[y + 1][x + 1] += gdp[y][x]; // 가로 → 대각선 + cdp[y + 1][x + 1] += sdp[y][x]; // 세로 → 대각선 + cdp[y + 1][x + 1] += cdp[y][x]; // 대각선 → 대각선 + } + } + } + + long result = gdp[n - 1][n - 1] + sdp[n - 1][n - 1] + cdp[n - 1][n - 1]; + + + System.out.print(result); + + + } + + static boolean canMove(int x, int y, int n ){ + return (x < n && x >= 0 && y < n && y >= 0)&&field[y][x]; + } + + static boolean canRightMove(int x, int y, int n ){ + return canMove(x+1,y,n); + } + + static boolean canDownMove(int x, int y, int n ){ + return canMove(x,y+1,n); + } + + static boolean canCrossMove(int x, int y, int n){ + return canMove(x+1,y,n)&&canMove(x+1,y+1,n)&&canMove(x,y+1,n); + } +} diff --git a/src/main/java/baekjoon/class4/BaekJoon1753.java b/src/baekjoon/class4/BaekJoon1753.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon1753.java rename to src/baekjoon/class4/BaekJoon1753.java diff --git a/src/baekjoon/class4/BaekJoon1865.java b/src/baekjoon/class4/BaekJoon1865.java new file mode 100644 index 0000000..249b896 --- /dev/null +++ b/src/baekjoon/class4/BaekJoon1865.java @@ -0,0 +1,87 @@ +package baekjoon.class4; + +import java.io.*; +import java.util.*; + +public class BaekJoon1865 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + static StringBuilder sb = new StringBuilder(); + + static class Edge { + int from, to, weight; + Edge(int from, int to, int weight) { + this.from = from; + this.to = to; + this.weight = weight; + } + } + + public static void main(String[] args) throws IOException { + int tc = Integer.parseInt(br.readLine()); + + while (tc-- > 0) { + StringTokenizer st = new StringTokenizer(br.readLine()); + int n = Integer.parseInt(st.nextToken()); // 지점 수 + int m = Integer.parseInt(st.nextToken()); // 도로 수 + int w = Integer.parseInt(st.nextToken()); // 웜홀 수 + + List edges = new ArrayList<>(); + + for (int i = 0; i < m; i++) { + st = new StringTokenizer(br.readLine()); + int s = Integer.parseInt(st.nextToken()); + int e = Integer.parseInt(st.nextToken()); + int t = Integer.parseInt(st.nextToken()); + + edges.add(new Edge(s, e, t)); + edges.add(new Edge(e, s, t)); + } + + for (int i = 0; i < w; i++) { + st = new StringTokenizer(br.readLine()); + int s = Integer.parseInt(st.nextToken()); + int e = Integer.parseInt(st.nextToken()); + int t = Integer.parseInt(st.nextToken()); + + edges.add(new Edge(s, e, -t)); + } + + for (int i = 1; i <= n; i++) { + edges.add(new Edge(0, i, 0)); + } + + if (hasNegativeCycle(n, edges)) { + sb.append("YES\n"); + } else { + sb.append("NO\n"); + } + } + + System.out.print(sb); + } + + static boolean hasNegativeCycle(int n, List edges) { + int[] dist = new int[n + 1]; // 0번 노드 포함 + Arrays.fill(dist, Integer.MAX_VALUE); + dist[0] = 0; // 시작은 가상의 0번 노드 + + for (int i = 0; i < n; i++) { + for (Edge edge : edges) { + if (dist[edge.from] != Integer.MAX_VALUE && + dist[edge.to] > dist[edge.from] + edge.weight) { + dist[edge.to] = dist[edge.from] + edge.weight; + } + } + } + + // n번째 루프에서 갱신되면 음수 사이클 존재 + for (Edge edge : edges) { + if (dist[edge.from] != Integer.MAX_VALUE && + dist[edge.to] > dist[edge.from] + edge.weight) { + return true; + } + } + + return false; + } +} diff --git a/src/main/java/baekjoon/class4/BaekJoon1916.java b/src/baekjoon/class4/BaekJoon1916.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon1916.java rename to src/baekjoon/class4/BaekJoon1916.java diff --git a/src/baekjoon/class4/BaekJoon1918.java b/src/baekjoon/class4/BaekJoon1918.java new file mode 100644 index 0000000..10a7055 --- /dev/null +++ b/src/baekjoon/class4/BaekJoon1918.java @@ -0,0 +1,94 @@ +package baekjoon.class4; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.Map; +import java.util.Stack; + +public class BaekJoon1918 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + public static void main(String[] args) throws IOException { + //평범한 식 입력 + String input = br.readLine(); + //식을 한글자씩 나누기 + char[] token = input.toCharArray(); + //연산자를 저장할 Stack 생성 + Stack stack = new Stack<>(); + //결과 출력 변수 생성 + StringBuilder sb = new StringBuilder(); + //한글자씩 검증 시작 + for (char now : token) { + //연산자의 경우 + if (Operation.isOperation(now)) { + //'(' 일경우 그냥 push'('이후에 쌓이는 것들이 ')'을 만났을 때 pop 될 구분점" + if (now == '(') stack.push(now); + //')'의 경우 ( 보다 늦게 쌓인 것들을 pop + else if (now == ')') { + //우선 stack의 top을 pop + Character top = stack.pop(); + //stack의 top이 '(' 가 나올 때까지 반복 + while (!(top == '(')) { + // pop 된 top의 경우 결과에 출력 + sb.append(top); + // '('는 출력되지 않도록 출력 이후에 pop + top = stack.pop(); + } + // '(' 도 ')' 도 아닌 경우 + } else { + //stack이 비었으면 뭐든 상관 없이 push + if (stack.empty()) + stack.push(now); + else { + //stack이 비지 않았으면 자신보다 레벨이 같거나 높은 op를 모두 pop + // + 보다 레벨이 높은 *, /, 레벨이 같은 + - 모두 pop + while (!stack.empty() && Operation.isOrder(now, stack.peek())) { + sb.append(stack.pop()); + } + // 모두 pop을 한 뒤 now를 push + stack.push(now); + } + } + // 피연산인 경우 바로 출력 + } else { + sb.append(now); + } + } + + // 입력에 대한 처리가 끝난 이후 stack을 비워줌 + while(!stack.empty()) { + sb.append(stack.pop()); + } + + //결과 출력 + System.out.print(sb); + } + + + //연산자에 대한 정보를 처리 + private static class Operation{ + static Map operationLevel = new HashMap<>(); + + static { + operationLevel.put('+',1); + operationLevel.put('-',1); + operationLevel.put('*',2); + operationLevel.put('/',2); + operationLevel.put('(',0); + operationLevel.put(')',0); + } + + //특정 Char가 Operation 인지 피연산자인지 구분 + public static boolean isOperation(char ch){ + return operationLevel.containsKey(ch); + } + + //연산자끼리의 비교에서 레벨 수준 비교 + //pop 해야하는 경우 어디까지 pop을 할지 정하게 됨 + //pop하는 기준은 자기 보다 우선순위가 높거나 같은 경우 까지. + public static boolean isOrder(char a, char b){ + return operationLevel.get(a) <= operationLevel.get(b); + } + } +} diff --git a/src/main/java/baekjoon/class4/BaekJoon1932.java b/src/baekjoon/class4/BaekJoon1932.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon1932.java rename to src/baekjoon/class4/BaekJoon1932.java diff --git a/src/baekjoon/class4/BaekJoon1967.java b/src/baekjoon/class4/BaekJoon1967.java new file mode 100644 index 0000000..1b5f983 --- /dev/null +++ b/src/baekjoon/class4/BaekJoon1967.java @@ -0,0 +1,144 @@ +package baekjoon.class4; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + +public class BaekJoon1967 { + /* + 트리의 지름 찾기. + 트리에서 가장 가중치 합이 큰 경로 찾기 + + 특정 노드에서 다른 모든 노드 중 가장 큰 가중치. + + 근데 사실 리프 노드에서 다른 리프 노드까지의 길이만 측정해도 충분. + + 리프 노드들에서 다른 모든 리프 노드 까지의 가중치를 구하는 것은 결국 + 모든 노드까지의 거리를 구하는 것이니. + + 특정 리프노드에서 다이제스트라 알고리즘을 실행하며 가장 큰 가중치를 확인하게끔. + */ + + //입력기 + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + + //Node간의 연결 표시 + //num이 key인 Node에 연결된 Node들의 집합. + static Map> graph; + + public static void main(String[] args) throws IOException { + //node의 개수 + int n = Integer.parseInt(br.readLine()); + + //node 에 연결된 다른 Node들 초기화 + init(n); + + //입력을 받아서 각 노드별 연결 정도 확인 + input(n); + + //결과 탐색 및 반환 + int result = searchResult(n); + + //결과 출력 + System.out.print(result); + } + + //그래프 초기화 시키기 작업 + static void init(int n){ + graph = new HashMap<>(); + for(int i = 1;i<=n;i++){ + graph.put(i, new ArrayList<>()); + } + } + + static void input(int n) throws IOException{ + //1번 루트 노드를 자식으로 하는 입력은 없으니 + //총 입력은 n-1 번 + StringTokenizer st; + for(int i = 1;i queue = new LinkedList<>(); + + boolean[] visited = new boolean[graph.size()+1]; + queue.add(new Node(1,0)); + int farNode = 1; + int max = 0; + while(!queue.isEmpty()){ + Node nowNode = queue.poll(); + if(visited[nowNode.num]) continue; + else{ + List linkNodes = graph.get(nowNode.num); + for(Node linkNode : linkNodes){ + if(visited[linkNode.num]) continue; + else{ + queue.add(new Node(linkNode.num, linkNode.weight+ nowNode.weight)); + } + } + visited[nowNode.num] = true; + if(max < nowNode.weight){ + max = nowNode.weight; + farNode = nowNode.num; + } + } + } + return farNode; + } + + static int di(int i){ + Queue queue = new LinkedList<>(); + + boolean[] visited = new boolean[graph.size()+1]; + queue.add(new Node(i,0)); + int max = 0; + while(!queue.isEmpty()){ + Node nowNode = queue.poll(); + if(visited[nowNode.num]) continue; + else{ + List linkNodes = graph.get(nowNode.num); + for(Node linkNode : linkNodes){ + if(visited[linkNode.num]) continue; + else{ + queue.add(new Node(linkNode.num, linkNode.weight+ nowNode.weight)); + } + } + visited[nowNode.num] = true; + if(max < nowNode.weight){ + max = nowNode.weight; + } + } + } + return max; + + } + + static class Node{ + int num; + int weight; + + Node(int num, int weight){ + this.num = num; + this.weight = weight; + } + } + +} diff --git a/src/baekjoon/class4/BaekJoon1987.java b/src/baekjoon/class4/BaekJoon1987.java new file mode 100644 index 0000000..e43dfcd --- /dev/null +++ b/src/baekjoon/class4/BaekJoon1987.java @@ -0,0 +1,98 @@ +package baekjoon.class4; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Stack; +import java.util.StringTokenizer; + +public class BaekJoon1987 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static char[][] field; + + static boolean[] visitedAlph = new boolean[27]; + + static int[] moveX = {0,-1,0,1}; + static int[] moveY = {-1,0,1,0}; + + public static void main(String[] args) throws IOException{ + + init(); + + solved(); + } + + private static void init() throws IOException { + StringTokenizer st = new StringTokenizer(br.readLine()); + + int R = Integer.parseInt(st.nextToken()); + + int C = Integer.parseInt(st.nextToken()); + + field = new char[R][C]; + + for(int i = 0; i < R;i++){ + char[] rInput = br.readLine().toCharArray(); + int c = 0; + for(char input : rInput){ + field[i][c++] = input; + } + } + } + + private static void solved(){ + int result = dfs(0,0,1); + + System.out.print(result); + } + + private static int dfs(int r, int c, int weight){ + if(visitedAlph[charToIndex(r, c)]) return weight; + + visitedAlph[charToIndex(r, c)] = true; + + int max = weight; + + for(int i = 0; i<4;i++){ + if(canMove(r + moveY[i],c + moveX[i])){ + int move = dfs(r + moveY[i], c+ moveX[i], weight+1); + max = Math.max(max, move); + } + } + + visitedAlph[charToIndex(r, c)] = false; + return max; + } + + private static boolean canMove(int r, int c){ + if(r<0) return false; + + if(field.length<=r) return false; + + if(field[0].length<=c) return false; + + if(c<0) return false; + + if(visitedAlph[charToIndex(r, c)]) return false; + + return true; + } + + private static int charToIndex(int r, int c) { + return field[r][c] - 'A'; + } + + private class Node{ + int weight; + + int r; + int c; + + public Node(int weight, int r, int c) { + this.weight = weight; + this.r = r; + this.c = c; + } + } +} diff --git a/src/main/java/baekjoon/class4/BaekJoon1991.java b/src/baekjoon/class4/BaekJoon1991.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon1991.java rename to src/baekjoon/class4/BaekJoon1991.java diff --git a/src/main/java/baekjoon/class4/BaekJoon2096.java b/src/baekjoon/class4/BaekJoon2096.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon2096.java rename to src/baekjoon/class4/BaekJoon2096.java diff --git a/src/main/java/baekjoon/class4/BaekJoon2206.java b/src/baekjoon/class4/BaekJoon2206.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon2206.java rename to src/baekjoon/class4/BaekJoon2206.java diff --git a/src/baekjoon/class4/BaekJoon2448.java b/src/baekjoon/class4/BaekJoon2448.java new file mode 100644 index 0000000..b3a4fa5 --- /dev/null +++ b/src/baekjoon/class4/BaekJoon2448.java @@ -0,0 +1,51 @@ +package baekjoon.class4; + +import java.util.Scanner; + +public class BaekJoon2448 { + static char[][] arr; + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + int N = sc.nextInt(); + arr = new char[N][2 * N - 1]; + + // 공백 초기화 + for (int i = 0; i < N; i++) { + for (int j = 0; j < 2 * N - 1; j++) { + arr[i][j] = ' '; + } + } + + drawTriangle(N, 0, N - 1); + + // 출력 + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < N; i++) { + sb.append(arr[i]); + sb.append("\n"); + } + System.out.println(sb); + } + + // N 높이의 삼각형을 (x, y) 꼭짓점 중심에 그리기 + static void drawTriangle(int size, int x, int y) { + if (size == 3) { + arr[x][y] = '*'; + arr[x + 1][y - 1] = '*'; + arr[x + 1][y + 1] = '*'; + for (int i = -2; i <= 2; i++) { + arr[x + 2][y + i] = '*'; + } + return; + } + + int newSize = size / 2; + // 위 삼각형 + drawTriangle(newSize, x, y); + // 왼쪽 아래 삼각형 + drawTriangle(newSize, x + newSize, y - newSize); + // 오른쪽 아래 삼각형 + drawTriangle(newSize, x + newSize, y + newSize); + } +} diff --git a/src/main/java/baekjoon/class4/BaekJoon9251.java b/src/baekjoon/class4/BaekJoon9251.java similarity index 100% rename from src/main/java/baekjoon/class4/BaekJoon9251.java rename to src/baekjoon/class4/BaekJoon9251.java diff --git a/src/baekjoon/class4/BaekJoon9935.java b/src/baekjoon/class4/BaekJoon9935.java new file mode 100644 index 0000000..2d5e0b2 --- /dev/null +++ b/src/baekjoon/class4/BaekJoon9935.java @@ -0,0 +1,56 @@ +package baekjoon.class4; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Stack; + +public class BaekJoon9935 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + String text = br.readLine(); + + String boomText = br.readLine(); + + + Stack stack = new Stack<>(); + + A : for(char now : text.toCharArray()){ + if(now==boomText.charAt(boomText.length()-1)){ + Stack transaction = new Stack<>(); + for(int i = boomText.length()-2; i>=0;i--){ + if(stack.isEmpty()){ + rollback(stack, transaction); + stack.push(now); + continue A; + } + char stackPop = stack.pop(); + transaction.push(stackPop); + if(boomText.charAt(i)!=stackPop){ + rollback(stack,transaction); + stack.push(now); + continue A; + } + } + }else{ + stack.push(now); + } + } + + while(!stack.isEmpty()){ + sb.append(stack.pop()); + } + sb.reverse(); + + System.out.println(sb.toString().isEmpty()?"FRULA":sb); + } + + private static void rollback(Stack stack, Stack transaction) { + while(!transaction.isEmpty()){ + stack.push(transaction.pop()); + } + } +} diff --git a/src/baekjoon/class5/B1106.java b/src/baekjoon/class5/B1106.java new file mode 100644 index 0000000..6350eac --- /dev/null +++ b/src/baekjoon/class5/B1106.java @@ -0,0 +1,49 @@ +package baekjoon.class5; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; + +public class B1106 { + + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + public static void main(String[] args) throws IOException { + + String[] input = br.readLine().split(" "); + + int c = Integer.parseInt(input[0]); // 목표 고객 수 + int n = Integer.parseInt(input[1]); // 도시 수 + + int[] cost = new int[n]; + int[] people = new int[n]; + + for(int i = 0; i < n; i++){ + input = br.readLine().split(" "); + cost[i] = Integer.parseInt(input[0]); + people[i] = Integer.parseInt(input[1]); + } + + int[] dp = new int[c + 101]; + Arrays.fill(dp, Integer.MAX_VALUE); + + dp[0] = 0; + + for(int i = 0; i < n; i++){ + for(int j = people[i]; j < c + 101; j++){ + if(dp[j - people[i]] != Integer.MAX_VALUE){ + dp[j] = Math.min(dp[j], dp[j - people[i]] + cost[i]); + } + } + } + + int answer = Integer.MAX_VALUE; + + for(int i = c; i < c + 101; i++){ + answer = Math.min(answer, dp[i]); + } + + System.out.println(answer); + } +} \ No newline at end of file diff --git a/src/main/java/baekjoon/gold/BaekJoon14502.java b/src/baekjoon/gold/BaekJoon14502.java similarity index 100% rename from src/main/java/baekjoon/gold/BaekJoon14502.java rename to src/baekjoon/gold/BaekJoon14502.java diff --git a/src/main/java/baekjoon/gold/BaekJoon9663.java b/src/baekjoon/gold/BaekJoon9663.java similarity index 100% rename from src/main/java/baekjoon/gold/BaekJoon9663.java rename to src/baekjoon/gold/BaekJoon9663.java diff --git a/src/main/java/baekjoon/seed/BigIntegerOperatior.java b/src/baekjoon/seed/BigIntegerOperatior.java similarity index 100% rename from src/main/java/baekjoon/seed/BigIntegerOperatior.java rename to src/baekjoon/seed/BigIntegerOperatior.java diff --git a/src/main/java/baekjoon/seed/Rich.java b/src/baekjoon/seed/Rich.java similarity index 100% rename from src/main/java/baekjoon/seed/Rich.java rename to src/baekjoon/seed/Rich.java diff --git a/src/baekjoon/silver/B1004.java b/src/baekjoon/silver/B1004.java new file mode 100644 index 0000000..40bad53 --- /dev/null +++ b/src/baekjoon/silver/B1004.java @@ -0,0 +1,47 @@ +package baekjoon.silver; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class B1004 { + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringBuilder sb = new StringBuilder(); + + int T = Integer.parseInt(br.readLine()); + + while (T-- > 0) { + StringTokenizer st = new StringTokenizer(br.readLine()); + int x1 = Integer.parseInt(st.nextToken()); + int y1 = Integer.parseInt(st.nextToken()); + int x2 = Integer.parseInt(st.nextToken()); + int y2 = Integer.parseInt(st.nextToken()); + + int n = Integer.parseInt(br.readLine()); + int count = 0; + + for (int i = 0; i < n; i++) { + st = new StringTokenizer(br.readLine()); + int cx = Integer.parseInt(st.nextToken()); + int cy = Integer.parseInt(st.nextToken()); + int r = Integer.parseInt(st.nextToken()); + + boolean startIn = isInside(x1, y1, cx, cy, r); + boolean endIn = isInside(x2, y2, cx, cy, r); + + if (startIn ^ endIn) count++; + } + + sb.append(count).append('\n'); + } + + System.out.print(sb); + } + + static boolean isInside(int x, int y, int cx, int cy, int r) { + long dx = x - cx; + long dy = y - cy; + return dx * dx + dy * dy < (long) r * r; + } +} diff --git a/src/baekjoon/silver/B1049.java b/src/baekjoon/silver/B1049.java new file mode 100644 index 0000000..b45f9dd --- /dev/null +++ b/src/baekjoon/silver/B1049.java @@ -0,0 +1,56 @@ +package baekjoon.silver; + +import basic.datastructure.list.ArrayList; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B1049 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + + String[] input = br.readLine().split(" "); + + int need = Integer.parseInt(input[0]); + + int brand = Integer.parseInt(input[1]); + + int setMin = Integer.MAX_VALUE; + + int numMin = Integer.MAX_VALUE; + + for(int i = 0 ; i < brand;i++){ + input = br.readLine().split(" "); + + setMin = Math.min(setMin, Integer.parseInt(input[0])); + + numMin = Math.min(numMin, Integer.parseInt(input[1])); + } + + boolean cheapSet = setMin < numMin * 6; + + int result=0; + + int needSet = need / 6; + int needNum = need % 6; + + if(cheapSet){ + result += needSet * setMin; + + if (needNum * numMin < setMin) { + result += needNum * numMin; + } else { + result += setMin; + } + }else{ + result = need * numMin; + } + sb.append(result); + System.out.print(sb); + } + +} diff --git a/src/baekjoon/silver/B1926.java b/src/baekjoon/silver/B1926.java new file mode 100644 index 0000000..77b1cbd --- /dev/null +++ b/src/baekjoon/silver/B1926.java @@ -0,0 +1,125 @@ +package baekjoon.silver; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.LinkedList; +import java.util.Queue; +import java.util.StringTokenizer; + +public class B1926 { + + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + private static boolean[][] field; + + private static boolean[][] visited; + + + private static int artNum = 0; + private static int maxNum =0; + + private static void input() throws IOException { + StringTokenizer st; + for(int i = 0; i< field.length;i++){ + int j = 0; + st= new StringTokenizer(br.readLine(), " "); + + while(st.hasMoreTokens()){ + field[i][j++] = st.nextToken().equals("1"); + } + } + } + + public static void main(String[] args) throws IOException { + + StringTokenizer st = new StringTokenizer(br.readLine(), " "); + + int n = Integer.parseInt(st.nextToken()); + + int m = Integer.parseInt(st.nextToken()); + + field = new boolean[n][m]; + + input(); + + visited = new boolean[n][m]; + + for(int i = 0; i < field.length;i++){ + for(int j = 0 ; j queue = new LinkedList<>(); + + queue.add(new Node(y,x)); + int count=0; + + + while(!queue.isEmpty()){ + Node now = queue.poll(); + if(visited[now.y][now.x]){ + continue; + } + count++; + visited[now.y][now.x] = true; + + for(int i = 0 ; i < 4;i++){ + int nextX = now.x + dx[i]; + int nextY = now.y + dy[i]; + + if(checkPosition(nextY, nextX)){ + if(!visited[nextY][nextX]&&field[nextY][nextX]){ + queue.add(new Node(nextY, nextX)); + } + } + } + } + if(count> maxNum){ + maxNum = count; + } + } + + private static boolean checkPosition(int y, int x){ + if(y<0||y>=field.length){ + return false; + } + if(x<0||x>=field[0].length){ + return false; + } + return true; + } + + + + + + private static class Node{ + int x; + int y; + + Node(int y, int x){ + this.x = x; + this.y = y; + } + } +} diff --git a/src/baekjoon/silver/B7562.java b/src/baekjoon/silver/B7562.java new file mode 100644 index 0000000..34bdbf4 --- /dev/null +++ b/src/baekjoon/silver/B7562.java @@ -0,0 +1,84 @@ +package baekjoon.silver; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Comparator; +import java.util.Objects; +import java.util.PriorityQueue; + +public class B7562 { + + private static boolean[][] visited; + + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static int goalX; + private static int goalY; + + private static int[] moveX = {-1,1,-2,-2,-1,1,2,2}; + private static int[] moveY = {-2,-2,-1,1,2,2,-1,1}; + + private static PriorityQueue queue ; + + public static void main(String[] args) throws IOException { + + int testCase = Integer.parseInt(br.readLine()); + + for(int t=0;t(Comparator.comparing(o->o.count)); + + String input = br.readLine(); + + int x = Integer.parseInt(input.split(" ")[0]); + int y = Integer.parseInt(input.split(" ")[1]); + + queue.add(new Node(x,y,0)); + + input = br.readLine(); + goalX = Integer.parseInt(input.split(" ")[0]); + goalY = Integer.parseInt(input.split(" ")[1]); + + while(!queue.isEmpty()){ + Node now = queue.poll(); + + if(visited[now.y][now.x]){ + continue; + } + + visited[now.y][now.x] = true; + if(now.x == goalX && now.y == goalY){ + System.out.println(now.count); + break; + } + for(int i = 0 ; i < moveX.length ; i++){ + if(canMove(now.x+moveX[i],now.y+moveY[i])){ + queue.add(new Node(now.x+moveX[i],now.y+moveY[i],now.count+1)); + } + } + } + } + + } + + static boolean canMove(int x, int y){ + return x >= 0 && y >= 0 && x < visited.length && y < visited.length && !visited[y][x]; + } + + private static class Node{ + int x; + int y; + int count; + + Node(int x, int y, int count){ + this.x = x; + this.y = y; + this.count = count; + } + } + +} diff --git a/src/main/java/baekjoon/silver/BaekJonn19709.java b/src/baekjoon/silver/BaekJonn19709.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJonn19709.java rename to src/baekjoon/silver/BaekJonn19709.java diff --git a/src/main/java/baekjoon/silver/BaekJoon1010.java b/src/baekjoon/silver/BaekJoon1010.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon1010.java rename to src/baekjoon/silver/BaekJoon1010.java diff --git a/src/main/java/baekjoon/silver/BaekJoon1094.java b/src/baekjoon/silver/BaekJoon1094.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon1094.java rename to src/baekjoon/silver/BaekJoon1094.java diff --git a/src/main/java/baekjoon/silver/BaekJoon11123.java b/src/baekjoon/silver/BaekJoon11123.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon11123.java rename to src/baekjoon/silver/BaekJoon11123.java diff --git a/src/main/java/baekjoon/silver/BaekJoon11675.java b/src/baekjoon/silver/BaekJoon11675.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon11675.java rename to src/baekjoon/silver/BaekJoon11675.java diff --git a/src/main/java/baekjoon/silver/BaekJoon1193.java b/src/baekjoon/silver/BaekJoon1193.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon1193.java rename to src/baekjoon/silver/BaekJoon1193.java diff --git a/src/main/java/baekjoon/silver/BaekJoon1268.java b/src/baekjoon/silver/BaekJoon1268.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon1268.java rename to src/baekjoon/silver/BaekJoon1268.java diff --git a/src/main/java/baekjoon/silver/BaekJoon1312.java b/src/baekjoon/silver/BaekJoon1312.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon1312.java rename to src/baekjoon/silver/BaekJoon1312.java diff --git a/src/main/java/baekjoon/silver/BaekJoon1316.java b/src/baekjoon/silver/BaekJoon1316.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon1316.java rename to src/baekjoon/silver/BaekJoon1316.java diff --git a/src/main/java/baekjoon/silver/BaekJoon13172.java b/src/baekjoon/silver/BaekJoon13172.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon13172.java rename to src/baekjoon/silver/BaekJoon13172.java diff --git a/src/main/java/baekjoon/silver/BaekJoon13414.java b/src/baekjoon/silver/BaekJoon13414.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon13414.java rename to src/baekjoon/silver/BaekJoon13414.java diff --git a/src/main/java/baekjoon/silver/BaekJoon13909.java b/src/baekjoon/silver/BaekJoon13909.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon13909.java rename to src/baekjoon/silver/BaekJoon13909.java diff --git a/src/main/java/baekjoon/silver/BaekJoon1475.java b/src/baekjoon/silver/BaekJoon1475.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon1475.java rename to src/baekjoon/silver/BaekJoon1475.java diff --git a/src/main/java/baekjoon/silver/BaekJoon15779.java b/src/baekjoon/silver/BaekJoon15779.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon15779.java rename to src/baekjoon/silver/BaekJoon15779.java diff --git a/src/main/java/baekjoon/silver/BaekJoon16208.java b/src/baekjoon/silver/BaekJoon16208.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon16208.java rename to src/baekjoon/silver/BaekJoon16208.java diff --git a/src/main/java/baekjoon/silver/BaekJoon1629.java b/src/baekjoon/silver/BaekJoon1629.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon1629.java rename to src/baekjoon/silver/BaekJoon1629.java diff --git a/src/main/java/baekjoon/silver/BaekJoon17127.java b/src/baekjoon/silver/BaekJoon17127.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon17127.java rename to src/baekjoon/silver/BaekJoon17127.java diff --git a/src/main/java/baekjoon/silver/BaekJoon24173.java b/src/baekjoon/silver/BaekJoon24173.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon24173.java rename to src/baekjoon/silver/BaekJoon24173.java diff --git a/src/main/java/baekjoon/silver/BaekJoon24755.java b/src/baekjoon/silver/BaekJoon24755.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon24755.java rename to src/baekjoon/silver/BaekJoon24755.java diff --git a/src/main/java/baekjoon/silver/BaekJoon2667.java b/src/baekjoon/silver/BaekJoon2667.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon2667.java rename to src/baekjoon/silver/BaekJoon2667.java diff --git a/src/main/java/baekjoon/silver/BaekJoon26876.java b/src/baekjoon/silver/BaekJoon26876.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon26876.java rename to src/baekjoon/silver/BaekJoon26876.java diff --git a/src/main/java/baekjoon/silver/BaekJoon31575.java b/src/baekjoon/silver/BaekJoon31575.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon31575.java rename to src/baekjoon/silver/BaekJoon31575.java diff --git a/src/baekjoon/silver/BaekJoon3711.java b/src/baekjoon/silver/BaekJoon3711.java new file mode 100644 index 0000000..5ca235d --- /dev/null +++ b/src/baekjoon/silver/BaekJoon3711.java @@ -0,0 +1,46 @@ +package baekjoon.silver; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.HashSet; + +public class BaekJoon3711 { + + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + int testCase = Integer.parseInt(br.readLine()); + + for(int i = 0 ; i < testCase; i++){ + int studentNum = Integer.parseInt(br.readLine()); + + int[] studentIds = new int[studentNum]; + + for(int j = 0 ; j namage = new HashSet<>(); + int min = 0; + A : while(true){ + namage.clear(); + min++; + for(int id : studentIds){ + int temp = id % min; + + if(namage.contains(temp)) continue A; + else{ + namage.add(temp); + } + } + sb.append(min).append("\n"); + break; + } + } + + System.out.print(sb); + } +} diff --git a/src/main/java/baekjoon/silver/BaekJoon8975.java b/src/baekjoon/silver/BaekJoon8975.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon8975.java rename to src/baekjoon/silver/BaekJoon8975.java diff --git a/src/main/java/baekjoon/silver/BaekJoon9372.java b/src/baekjoon/silver/BaekJoon9372.java similarity index 100% rename from src/main/java/baekjoon/silver/BaekJoon9372.java rename to src/baekjoon/silver/BaekJoon9372.java diff --git a/src/basic/algorithm/AbstractGraphAlgorithm.java b/src/basic/algorithm/AbstractGraphAlgorithm.java new file mode 100644 index 0000000..2303114 --- /dev/null +++ b/src/basic/algorithm/AbstractGraphAlgorithm.java @@ -0,0 +1,70 @@ +package basic.algorithm; + +import java.io.BufferedReader; +import java.io.IOException; + +public class AbstractGraphAlgorithm { + protected static int[][] field; + + protected static boolean[][] visited; + + public void init(BufferedReader br) throws IOException { + System.out.println("그래프의 크기는 가로 N, 세로 M으로 적용됩니다."); + + System.out.print("세로 N의 크기를 입력해주세요. : "); + int N = Integer.parseInt(br.readLine()); + + System.out.print("가로 M의 크기를 입력해주세요. : "); + int M = Integer.parseInt(br.readLine()); + + field = new int[N][M]; + + visited = new boolean[N][M]; + } + + public void input(BufferedReader br) throws IOException { + System.out.printf("그래프를 입력해주세요.\n 입력은 %d X %d의 크기로 작성해주시고, 열은 Enter, 행은 띄어쓰기로 구분해주세요.\n", field.length, field[0].length); + + for (int i = 0 ; i< field.length ; i++) { + String line = br.readLine(); + + String[] rows = line.split(" "); + + int col =0; + + if (rows.length != field[0].length) { + System.out.printf("%d번째 열의 입력값이 이상합니다. 확인해주세요.", i); + throw new IOException(); + } + for(String row : rows) { + field[i][col++] = Integer.parseInt(row); + } + + } + } + + public void printAsGraph(){ + for (int[] ints : field) { + for (int anInt : ints) { + System.out.print(anInt + " "); + } + System.out.println(); + } + System.out.println(); + } + + public void printAsVisited(){ + for(boolean[] row : visited){ + for (boolean bol : row) { + if(bol){ + System.out.print("O "); + }else{ + System.out.print("X "); + } + } + System.out.println(); + } + + System.out.println(); + } +} diff --git a/src/main/java/basic/algorithm/AbstractTreeAlogorithm.java b/src/basic/algorithm/AbstractTreeAlogorithm.java similarity index 100% rename from src/main/java/basic/algorithm/AbstractTreeAlogorithm.java rename to src/basic/algorithm/AbstractTreeAlogorithm.java diff --git a/src/basic/algorithm/Dijkstra.java b/src/basic/algorithm/Dijkstra.java new file mode 100644 index 0000000..cfc3ff9 --- /dev/null +++ b/src/basic/algorithm/Dijkstra.java @@ -0,0 +1,183 @@ +package basic.algorithm; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + + +/* +특정 노드에서 다른 모든 노드까지의 최단 거리를 구하는 알고리즘. + +음수 가중치가 있을 경우에는 쓸 수 없음. + +해당 문제에선 방향 없는 그래프를 기준. + */ +public class Dijkstra { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + static int[] distance; + + static Map> graph = new HashMap<>(); + + public static void main(String[] args) throws IOException { + + //Node의 개수 + int N = Integer.parseInt(br.readLine()); + + //간선의 개수 + int E = Integer.parseInt(br.readLine()); + + //0 은 사용하지 않고 1 ~ N를 사용하며 특정 Node 부터 다른 Node들 까지의 거리. + init(N); + + input(E); + + //입력 특정 노드 + dijkstra(Integer.parseInt(br.readLine())); + + printDistance(); + } + //다익스트라 알고리즘 + private static void dijkstra(int base){ + //우선 순위 큐를 이용. + PriorityQueue queue = new PriorityQueue<>( + Comparator.comparingInt(node -> node.cost) + ); + + //시작점을 Queue에 추가한 채로 시작 + queue.add(new Node(base, 0)); + + //중요 포인트 + distance[base] = 0; + + //Queue를 빼고 시작 + while(!queue.isEmpty()){ + //가장 최근의 노드를 poll + Node now = queue.poll(); + + //만약 추가하려는 값이 기존 최솟 값보다 크거나 같다면 + //같은 과정이 반복될테니 제외 + //이때 now.cost와 distance[now.to] 가 같은 경우는 최솟값을 최초로 집어 넣을 때만 해당 + if(now.cost > distance[now.to]) continue; + + //값의 갱신이 이루어져야한다면 해당 Node와 이어진 모든 Node들을 탐색 + for(Node next : graph.get(now.to)){ + //다음으로 이어지는 Cost를 구함. + int nextDistance = now.cost + next.cost; + + //이어지는 cost가 최신 distance보다 작을 경우 + if(nextDistance < distance[next.to]){ + //해당 값을 Queue에 추가. + distance[next.to] = nextDistance; + queue.add(new Node(next.to, nextDistance)); + } + } + } + } + + //초기화 과정 + private static void init(int N) { + distance = new int[N +1]; + + //거리의 초기값을 최댓값으로 지정. + Arrays.fill(distance,Integer.MAX_VALUE); + + //Graph 초기화 + for(int i = 1; i<= N; i++){ + graph.put(i, new ArrayList<>()); + } + } + //입력 과정 + private static void input(int E) throws IOException { + StringTokenizer st; + + //그래프 입력 + for(int i = 0; i< E; i++){ + //입력의 형태는 (from) (to) (cost) + st = new StringTokenizer(br.readLine()); + + //시작 노드 + int from = Integer.parseInt(st.nextToken()); + //도착 노드 + int to = Integer.parseInt(st.nextToken()); + //비용 + int cost = Integer.parseInt(st.nextToken()); + + //양 방향이기 때문에 둘 모두에 입력 + graph.get(from).add(new Node(to, cost)); + graph.get(to).add(new Node(from, cost)); + } + } + //결과 출력 과정 + private static void printDistance() { + int count = 0 ; + for(int i : distance){ + if(count==0){ + count++; + continue; + } + + if(i == Integer.MAX_VALUE) + sb.append(String.format("%3s", "INF")).append(" "); + else + sb.append(String.format("%3d", i)).append(" "); + } + + System.out.print(sb); + } + + static class Node{ + int to; + int cost; + + public Node(int to, int cost) { + this.to = to; + this.cost = cost; + } + } +} + +//Test Case 1 +/* +입력 +5 +6 +1 2 2 +1 3 3 +2 3 2 +2 4 4 +3 4 1 +4 5 1 +1 + +0 2 3 4 5 +*/ +//Test Case 2 +/* +입력 +4 +4 +1 2 1 +2 3 2 +3 4 3 +1 4 10 +1 + +출력 +0 1 3 6 +*/ +//Tast Case 3 +/* +입력 +3 +2 +1 2 5 +2 3 2 +2 + +출력 + 7 0 2 + */ diff --git a/src/main/java/basic/algorithm/Order.java b/src/basic/algorithm/Order.java similarity index 100% rename from src/main/java/basic/algorithm/Order.java rename to src/basic/algorithm/Order.java diff --git a/src/main/java/basic/baaarking/sum100.java b/src/basic/baaarking/sum100.java similarity index 100% rename from src/main/java/basic/baaarking/sum100.java rename to src/basic/baaarking/sum100.java diff --git a/src/basic/bfs/GraphBFS.java b/src/basic/bfs/GraphBFS.java new file mode 100644 index 0000000..f15590d --- /dev/null +++ b/src/basic/bfs/GraphBFS.java @@ -0,0 +1,73 @@ +package basic.bfs; + +import basic.algorithm.AbstractGraphAlgorithm; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.LinkedList; +import java.util.Queue; + +public class GraphBFS extends AbstractGraphAlgorithm { + + private static final int[] dx = {-1, 1, 0, 0}; // 상하좌우 + private static final int[] dy = {0, 0, -1, 1}; + + public static void main(String[] args) throws IOException { + GraphBFS bfs = new GraphBFS(); + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + bfs.init(br); + bfs.input(br); + bfs.printAsGraph(); + + System.out.println("BFS 탐색 시작 (시작점 입력): "); + System.out.print("행(row): "); + int startRow = Integer.parseInt(br.readLine()); + System.out.print("열(col): "); + int startCol = Integer.parseInt(br.readLine()); + + bfs.bfs(startRow, startCol); + } + + private void bfs(int x, int y) { + Queue queue = new LinkedList<>(); + + // 시작점이 이동 불가능한 경우 + if (field[x][y] != 1) { + System.out.println("시작 지점이 이동 불가능합니다."); + return; + } + + visited[x][y] = true; + printAsVisited(); + queue.add(new Node(x, y)); + + while (!queue.isEmpty()) { + Node now = queue.poll(); + + for (int i = 0; i < 4; i++) { + int nx = now.x + dx[i]; + int ny = now.y + dy[i]; + + if (nx >= 0 && nx < field.length && + ny >= 0 && ny < field[0].length && + !visited[nx][ny] && field[nx][ny] == 1) { + + visited[nx][ny] = true; + printAsVisited(); + queue.add(new Node(nx, ny)); + } + } + } + } + + private static class Node { + int x; + int y; + + Node(int x, int y) { + this.x = x; + this.y = y; + } + } +} diff --git a/src/main/java/basic/algorithm/BFS.java b/src/basic/bfs/TreeBFS.java similarity index 77% rename from src/main/java/basic/algorithm/BFS.java rename to src/basic/bfs/TreeBFS.java index 48c3c85..b782d49 100644 --- a/src/main/java/basic/algorithm/BFS.java +++ b/src/basic/bfs/TreeBFS.java @@ -1,13 +1,10 @@ -package basic.algorithm; +package basic.bfs; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; +import basic.algorithm.AbstractTreeAlogorithm; import java.util.LinkedList; import java.util.Queue; -import java.util.StringTokenizer; -public class BFS extends AbstractTreeAlogorithm{ +public class TreeBFS extends AbstractTreeAlogorithm { public static void main(String[] args){ printAsBinaryTree(); diff --git a/src/main/java/basic/datastructure/Base.java b/src/basic/datastructure/Base.java similarity index 100% rename from src/main/java/basic/datastructure/Base.java rename to src/basic/datastructure/Base.java diff --git a/src/main/java/basic/datastructure/list/AbstractList.java b/src/basic/datastructure/list/AbstractList.java similarity index 100% rename from src/main/java/basic/datastructure/list/AbstractList.java rename to src/basic/datastructure/list/AbstractList.java diff --git a/src/main/java/basic/datastructure/list/ArrayList.java b/src/basic/datastructure/list/ArrayList.java similarity index 100% rename from src/main/java/basic/datastructure/list/ArrayList.java rename to src/basic/datastructure/list/ArrayList.java diff --git a/src/main/java/basic/datastructure/list/LinkedList.java b/src/basic/datastructure/list/LinkedList.java similarity index 100% rename from src/main/java/basic/datastructure/list/LinkedList.java rename to src/basic/datastructure/list/LinkedList.java diff --git a/src/main/java/basic/datastructure/list/List.java b/src/basic/datastructure/list/List.java similarity index 100% rename from src/main/java/basic/datastructure/list/List.java rename to src/basic/datastructure/list/List.java diff --git a/src/main/java/basic/datastructure/map/AbstractMap.java b/src/basic/datastructure/map/AbstractMap.java similarity index 100% rename from src/main/java/basic/datastructure/map/AbstractMap.java rename to src/basic/datastructure/map/AbstractMap.java diff --git a/src/main/java/basic/datastructure/map/HashMap.java b/src/basic/datastructure/map/HashMap.java similarity index 100% rename from src/main/java/basic/datastructure/map/HashMap.java rename to src/basic/datastructure/map/HashMap.java diff --git a/src/main/java/basic/datastructure/map/ListMap.java b/src/basic/datastructure/map/ListMap.java similarity index 100% rename from src/main/java/basic/datastructure/map/ListMap.java rename to src/basic/datastructure/map/ListMap.java diff --git a/src/main/java/basic/datastructure/map/Map.java b/src/basic/datastructure/map/Map.java similarity index 100% rename from src/main/java/basic/datastructure/map/Map.java rename to src/basic/datastructure/map/Map.java diff --git a/src/basic/dfs/GraphDFS.java b/src/basic/dfs/GraphDFS.java new file mode 100644 index 0000000..6790589 --- /dev/null +++ b/src/basic/dfs/GraphDFS.java @@ -0,0 +1,46 @@ +package basic.dfs; + +import basic.algorithm.AbstractGraphAlgorithm; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class GraphDFS extends AbstractGraphAlgorithm { + + public static void main(String[] args) throws IOException { + GraphDFS dfs = new GraphDFS(); + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + dfs.init(br); + dfs.input(br); + dfs.printAsGraph(); + + System.out.println("DFS 탐색 시작 (시작점 입력): "); + System.out.print("행(row): "); + int startRow = Integer.parseInt(br.readLine()); + System.out.print("열(col): "); + int startCol = Integer.parseInt(br.readLine()); + + dfs.dfs(startRow, startCol); + } + + private static final int[] dx = {-1, 1, 0, 0}; // 상하좌우 + private static final int[] dy = {0, 0, -1, 1}; + + private void dfs(int x, int y) { + visited[x][y] = true; + printAsVisited(); + // 4방향 탐색 + for (int i = 0; i < 4; i++) { + int nx = x + dx[i]; + int ny = y + dy[i]; + + // 경계 체크 + 방문 안함 + 이동 가능 (1인 경우) + if (nx >= 0 && nx < field.length && + ny >= 0 && ny < field[0].length && + !visited[nx][ny] && field[nx][ny] == 1) { + dfs(nx, ny); + } + } + } +} diff --git a/src/main/java/basic/algorithm/DFS.java b/src/basic/dfs/TreeDFS.java similarity index 82% rename from src/main/java/basic/algorithm/DFS.java rename to src/basic/dfs/TreeDFS.java index 7a5a38a..c8448ff 100644 --- a/src/main/java/basic/algorithm/DFS.java +++ b/src/basic/dfs/TreeDFS.java @@ -1,6 +1,6 @@ -package basic.algorithm; +package basic.dfs; -import java.io.FilterOutputStream; +import basic.algorithm.AbstractTreeAlogorithm; /* @@ -10,7 +10,7 @@ dfs 의 경우 0 1 3 4 5 6 */ -public class DFS extends AbstractTreeAlogorithm{ +public class TreeDFS extends AbstractTreeAlogorithm { public static void main(String[] args){ printAsBinaryTree(); diff --git a/src/main/java/basic/practice/problem3_1.java b/src/basic/practice/problem3_1.java similarity index 100% rename from src/main/java/basic/practice/problem3_1.java rename to src/basic/practice/problem3_1.java diff --git a/src/main/java/basic/sort/ArrayGenerator.java b/src/basic/sort/ArrayGenerator.java similarity index 100% rename from src/main/java/basic/sort/ArrayGenerator.java rename to src/basic/sort/ArrayGenerator.java diff --git a/src/main/java/basic/sort/Sort.java b/src/basic/sort/Sort.java similarity index 100% rename from src/main/java/basic/sort/Sort.java rename to src/basic/sort/Sort.java diff --git a/src/main/java/basic/sort/SortMain.java b/src/basic/sort/SortMain.java similarity index 100% rename from src/main/java/basic/sort/SortMain.java rename to src/basic/sort/SortMain.java diff --git a/src/main/java/basic/sort/impl/Bubble.java b/src/basic/sort/impl/Bubble.java similarity index 100% rename from src/main/java/basic/sort/impl/Bubble.java rename to src/basic/sort/impl/Bubble.java diff --git a/src/main/java/basic/sort/impl/Insert.java b/src/basic/sort/impl/Insert.java similarity index 100% rename from src/main/java/basic/sort/impl/Insert.java rename to src/basic/sort/impl/Insert.java diff --git a/src/main/java/basic/sort/impl/Merge.java b/src/basic/sort/impl/Merge.java similarity index 100% rename from src/main/java/basic/sort/impl/Merge.java rename to src/basic/sort/impl/Merge.java diff --git a/src/main/java/basic/sort/impl/Quick.java b/src/basic/sort/impl/Quick.java similarity index 100% rename from src/main/java/basic/sort/impl/Quick.java rename to src/basic/sort/impl/Quick.java diff --git a/src/main/java/basic/sort/impl/Select.java b/src/basic/sort/impl/Select.java similarity index 100% rename from src/main/java/basic/sort/impl/Select.java rename to src/basic/sort/impl/Select.java diff --git a/src/main/java/basic/star/Star1.java b/src/basic/star/Star1.java similarity index 100% rename from src/main/java/basic/star/Star1.java rename to src/basic/star/Star1.java diff --git a/src/main/java/basic/star/Star2.java b/src/basic/star/Star2.java similarity index 100% rename from src/main/java/basic/star/Star2.java rename to src/basic/star/Star2.java diff --git a/src/main/java/basic/star/Star3.java b/src/basic/star/Star3.java similarity index 100% rename from src/main/java/basic/star/Star3.java rename to src/basic/star/Star3.java diff --git a/src/main/java/basic/star/Star4.java b/src/basic/star/Star4.java similarity index 100% rename from src/main/java/basic/star/Star4.java rename to src/basic/star/Star4.java diff --git a/src/main/java/basic/star/Star5.java b/src/basic/star/Star5.java similarity index 100% rename from src/main/java/basic/star/Star5.java rename to src/basic/star/Star5.java diff --git a/src/main/java/basic/star/Star5_2.java b/src/basic/star/Star5_2.java similarity index 100% rename from src/main/java/basic/star/Star5_2.java rename to src/basic/star/Star5_2.java diff --git a/src/main/java/basic/star/Star5_3.java b/src/basic/star/Star5_3.java similarity index 100% rename from src/main/java/basic/star/Star5_3.java rename to src/basic/star/Star5_3.java diff --git a/src/main/java/basic/star/Star5_3_2.java b/src/basic/star/Star5_3_2.java similarity index 100% rename from src/main/java/basic/star/Star5_3_2.java rename to src/basic/star/Star5_3_2.java diff --git a/src/main/java/basic/star/Star6.java b/src/basic/star/Star6.java similarity index 100% rename from src/main/java/basic/star/Star6.java rename to src/basic/star/Star6.java diff --git a/src/main/java/basic/star/Star7.java b/src/basic/star/Star7.java similarity index 100% rename from src/main/java/basic/star/Star7.java rename to src/basic/star/Star7.java diff --git a/src/main/java/basic/star/Star8.java b/src/basic/star/Star8.java similarity index 100% rename from src/main/java/basic/star/Star8.java rename to src/basic/star/Star8.java diff --git a/src/main/java/basic/star/Star9.java b/src/basic/star/Star9.java similarity index 100% rename from src/main/java/basic/star/Star9.java rename to src/basic/star/Star9.java diff --git a/src/main/java/basic/star/StarInterface.java b/src/basic/star/StarInterface.java similarity index 100% rename from src/main/java/basic/star/StarInterface.java rename to src/basic/star/StarInterface.java diff --git a/src/main/java/basic/star/StarMain.java b/src/basic/star/StarMain.java similarity index 100% rename from src/main/java/basic/star/StarMain.java rename to src/basic/star/StarMain.java diff --git a/src/main/java/basic/star/StarUbin5_2.java b/src/basic/star/StarUbin5_2.java similarity index 100% rename from src/main/java/basic/star/StarUbin5_2.java rename to src/basic/star/StarUbin5_2.java diff --git a/src/main/java/basic/star/StartUbin5_2_2.java b/src/basic/star/StartUbin5_2_2.java similarity index 100% rename from src/main/java/basic/star/StartUbin5_2_2.java rename to src/basic/star/StartUbin5_2_2.java diff --git a/src/bkd/array/B11328.java b/src/bkd/array/B11328.java new file mode 100644 index 0000000..086ad8e --- /dev/null +++ b/src/bkd/array/B11328.java @@ -0,0 +1,52 @@ +package bkd.array; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B11328 { + + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + int n = Integer.parseInt(br.readLine()); + + int[] alph; + + while(n-->0){ + String[] input = br.readLine().split(" "); + alph = new int['z'-'a'+1]; + + boolean possible = true; + for(int i = 0 ; i < input[0].length();i++){ + char first = input[0].charAt(i); + alph[first-'a']++; + } + + for(int i = 0 ; i < input[1].length();i++){ + char second = input[1].charAt(i); + alph[second-'a']--; + } + + for(int i = 0; i a) sb.append(a).append(" "); + + } + + System.out.print(sb); + } + + +} diff --git a/src/bkd/base_code_create2/B1267.java b/src/bkd/base_code_create2/B1267.java new file mode 100644 index 0000000..c366045 --- /dev/null +++ b/src/bkd/base_code_create2/B1267.java @@ -0,0 +1,44 @@ +package bkd.base_code_create2; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; + +public class B1267 { + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + int n = Integer.parseInt(br.readLine()); + + int[] input = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); + + int Y = 0; + + int M = 0; + + for(int time : input){ + if(time == 0){ + continue; + } + + Y += (time/30+1)*10; + M += (time/60+1)*15; + } + + int min = Math.min(Y,M); + + if(Y==min){ + sb.append("Y").append(" "); + } + if(M==min){ + sb.append("M").append(" "); + } + sb.append(min); + + System.out.print(sb); + } +} diff --git a/src/bkd/base_code_create2/B15552.java b/src/bkd/base_code_create2/B15552.java new file mode 100644 index 0000000..c67945a --- /dev/null +++ b/src/bkd/base_code_create2/B15552.java @@ -0,0 +1,31 @@ +package bkd.base_code_create2; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; + +public class B15552 { + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + int n = Integer.parseInt(br.readLine()); + + + int[] input; + for(int i = 0; i < n; i++){ + input = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); + + sb.append(input[0]+input[1]).append("\n"); + + } + + + System.out.print(sb); + } + + +} diff --git a/src/bkd/base_code_create2/B2309.java b/src/bkd/base_code_create2/B2309.java new file mode 100644 index 0000000..719d7ec --- /dev/null +++ b/src/bkd/base_code_create2/B2309.java @@ -0,0 +1,54 @@ +package bkd.base_code_create2; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; + +public class B2309 { + + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + private static boolean done = false; + + public static void main(String[] args) throws IOException { + + int[] inputs = new int[9]; + + for(int i = 0; i < inputs.length; i++) { + inputs[i] = Integer.parseInt(br.readLine()); + } + + Arrays.sort(inputs); + + backTraking(inputs, 1,inputs[0],1,inputs[0]+""); + backTraking(inputs, 1,0,0,""); + + + System.out.print(sb); + } + + + static void backTraking(int[] inputs, int index , int sum, int num,String result) { + + if(sum > 100||done||index>=9||num>7){ + return; + } + + int nextNum = num+1; + int nextSum = sum+inputs[index]; + String nextResult = result +"\n"+ inputs[index]; + + if(nextNum == 7&&nextSum==100){ + done = true; + sb.append(nextResult); + } + + backTraking(inputs,index+1,sum,num,result); + backTraking(inputs,index+1,nextSum,nextNum,nextResult); + + } + +} diff --git a/src/bkd/base_code_create2/B2438.java b/src/bkd/base_code_create2/B2438.java new file mode 100644 index 0000000..11bb473 --- /dev/null +++ b/src/bkd/base_code_create2/B2438.java @@ -0,0 +1,24 @@ +package bkd.base_code_create2; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class B2438 { + + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + private static StringBuilder sb = new StringBuilder(); + + public static void main(String[] args) throws IOException { + int n = Integer.parseInt(br.readLine()); + + for(int i = 0 ;i list = new ArrayList<>(); - - Assertions.assertEquals(0,list.getSize()); - } - - @Test - public void testAddAndGet() { - ArrayList list = new ArrayList<>(); - list.add("apple"); - list.add("banana"); - - assertEquals(2, list.getSize()); - assertEquals("apple", list.get(0)); - assertEquals("banana", list.get(1)); - } - - @Test - public void testInsert() { - ArrayList list = new ArrayList<>(); - list.add("a"); - list.add("c"); - list.insert("b", 1); - - assertEquals("b", list.get(1)); - assertEquals(3, list.getSize()); - } - - @Test - public void testRemove() { - ArrayList list = new ArrayList<>(); - list.add("x"); - list.add("y"); - list.add("z"); - - list.remove("y"); - assertEquals(2, list.getSize()); - assertEquals("z", list.get(1)); - } - - @Test - public void testClear(){ - ArrayList list = new ArrayList<>(); - - list.add("x"); - list.add("y"); - list.add("z"); - - list.clear(); - - assertEquals(0,list.getSize()); - } - - @Test - public void testOutOfBounds(){ - ArrayList list = new ArrayList<>(); - - list.add("x"); - - assertThrows(ArrayIndexOutOfBoundsException.class,()->list.get(10)); - } - - @Test - public void testRejectNull(){ - ArrayList list = new ArrayList<>(); - - assertThrows(IllegalArgumentException.class,()->list.add(null)); - } -} diff --git a/src/test/java/datastructure/list/LinkedListTest.java b/src/test/java/datastructure/list/LinkedListTest.java deleted file mode 100644 index 7121ce2..0000000 --- a/src/test/java/datastructure/list/LinkedListTest.java +++ /dev/null @@ -1,132 +0,0 @@ -package datastructure.list; - - -import basic.datastructure.list.LinkedList; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class LinkedListTest { - - private LinkedList list; - - @BeforeEach - void setUp() { - list = new LinkedList<>(); - } - - @Test - void testAddAndGet() { - list.add("A"); - list.add("B"); - list.add("C"); - - assertEquals(3, list.getSize()); - assertEquals("A", list.get(0)); - assertEquals("B", list.get(1)); - assertEquals("C", list.get(2)); - } - - @Test - void testInsert() { - list.add("A"); - list.add("C"); - list.insert("B", 1); - - assertEquals(3, list.getSize()); - assertEquals("A", list.get(0)); - assertEquals("B", list.get(1)); - assertEquals("C", list.get(2)); - } - - @Test - void testUpdate() { - list.add("A"); - list.update(0, "Z"); - - assertEquals("Z", list.get(0)); - } - - @Test - void testDelete() { - list.add("A"); - list.add("B"); - list.delete(0); - - assertEquals(1, list.getSize()); - assertEquals("B", list.get(0)); - } - - @Test - void testRemove() { - list.add("A"); - list.add("B"); - list.add("A"); - - list.remove("A"); - - assertEquals(2, list.getSize()); - assertEquals("B", list.get(0)); - assertEquals("A", list.get(1)); - } - - @Test - void testRemoveAll() { - list.add("A"); - list.add("B"); - list.add("A"); - - int removed = list.removeAll("A"); - - assertEquals(2, removed); - assertEquals(1, list.getSize()); - assertEquals("B", list.get(0)); - } - - @Test - void testContains() { - list.add("A"); - list.add("B"); - - assertTrue(list.contains("A")); - assertFalse(list.contains("C")); - } - - @Test - void testFindFirstIndex() { - list.add("X"); - list.add("Y"); - list.add("X"); - - assertEquals(0, list.findFirstIndex("X")); - assertEquals(1, list.findFirstIndex("Y")); - assertEquals(-1, list.findFirstIndex("Z")); - } - - @Test - void testAddAll() { - LinkedList another = new LinkedList<>(); - another.add("A"); - another.add("B"); - - list.add("X"); - list.addAll(another); - - assertEquals(3, list.getSize()); - assertEquals("X", list.get(0)); - assertEquals("A", list.get(1)); - assertEquals("B", list.get(2)); - } - - @Test - void testClear() { - list.add("A"); - list.add("B"); - - list.clear(); - - assertEquals(0, list.getSize()); - assertFalse(list.contains("A")); - } -} \ No newline at end of file diff --git a/src/test/java/datastructure/map/HashMapTest.java b/src/test/java/datastructure/map/HashMapTest.java deleted file mode 100644 index 0879e85..0000000 --- a/src/test/java/datastructure/map/HashMapTest.java +++ /dev/null @@ -1,143 +0,0 @@ -package datastructure.map; - -import basic.datastructure.map.HashMap; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -//통과 -//이후 Resize HashMap을 만들었을때를 대비해 수행 시간도 기록 -public class HashMapTest { - - private HashMap map; - - @BeforeEach - public void setUp() { - map = new HashMap<>(); - } - - @Test - public void testPutAndGet() { - map.put("apple", 1); - map.put("banana", 2); - map.put("carrot", 3); - - assertEquals(1, map.get("apple")); - assertEquals(2, map.get("banana")); - assertEquals(3, map.get("carrot")); - } - - @Test - public void testPutDuplicateKeyOverrides() { - map.put("apple", 1); - map.put("apple", 999); // override - - assertEquals(999, map.get("apple")); - assertEquals(1, map.size()); // size should stay 1 - } - - @Test - public void testContainsKey() { - map.put("apple", 1); - map.put("banana", 2); - - assertTrue(map.containsKey("apple")); - assertTrue(map.containsKey("banana")); - assertFalse(map.containsKey("carrot")); - } - - @Test - public void testRemove() { - map.put("apple", 1); - map.put("banana", 2); - - assertEquals(1, map.remove("apple")); - assertNull(map.get("apple")); - assertFalse(map.containsKey("apple")); - assertEquals(1, map.size()); - - assertNull(map.remove("not_exist")); - } - - @Test - public void testClear() { - map.put("apple", 1); - map.put("banana", 2); - map.put("carrot", 3); - - assertFalse(map.isEmpty()); - map.clear(); - assertTrue(map.isEmpty()); - assertEquals(0, map.size()); - assertNull(map.get("apple")); - } - - @Test - public void testSize() { - assertEquals(0, map.size()); - map.put("a", 1); - map.put("b", 2); - assertEquals(2, map.size()); - map.remove("a"); - assertEquals(1, map.size()); - map.clear(); - assertEquals(0, map.size()); - } - - @Test - public void testIsEmpty() { - assertTrue(map.isEmpty()); - map.put("x", 100); - assertFalse(map.isEmpty()); - map.remove("x"); - assertTrue(map.isEmpty()); - } - - @Test - public void testBulkInsertPerformance() { - int N = 100; - long start = System.nanoTime(); - for (int i = 0; i < N; i++) { - map.put("key" + i, i); - } - long end = System.nanoTime(); - - assertEquals(N, map.size()); - System.out.println("[PUT 100개] 걸린 시간: " + (end - start) / 1_000_000.0 + " ms"); - } - - @Test - public void testGetPerformance() { - int N = 100; - for (int i = 0; i < N; i++) { - map.put("key" + i, i); - } - - long start = System.nanoTime(); - for (int i = 0; i < N; i++) { - assertEquals(i, map.get("key" + i)); - } - long end = System.nanoTime(); - - System.out.println("[GET 100개] 걸린 시간: " + (end - start) / 1_000_000.0 + " ms"); - } - - @Test - public void testRemovePerformance() { - int N = 100; - for (int i = 0; i < N; i++) { - map.put("key" + i, i); - } - - long start = System.nanoTime(); - for (int i = 0; i < N; i++) { - assertEquals(i, map.remove("key" + i)); - } - long end = System.nanoTime(); - - assertEquals(0, map.size()); - System.out.println("[REMOVE 100개] 걸린 시간: " + (end - start) / 1_000_000.0 + " ms"); - } -} - diff --git a/src/test/java/datastructure/map/ListMapTest.java b/src/test/java/datastructure/map/ListMapTest.java deleted file mode 100644 index e380157..0000000 --- a/src/test/java/datastructure/map/ListMapTest.java +++ /dev/null @@ -1,84 +0,0 @@ -package datastructure.map; - - -import basic.datastructure.map.ListMap; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class ListMapTest { - - private ListMap map; - - @BeforeEach - void setUp() { - map = new ListMap<>(); - } - - @Test - void testPutAndGet() { - map.put("apple", 3); - map.put("banana", 5); - assertEquals(3, map.get("apple")); - assertEquals(5, map.get("banana")); - } - - @Test - void testUpdateValue() { - map.put("apple", 3); - map.put("apple", 10); // overwrite - assertEquals(10, map.get("apple")); - } - - @Test - void testContainsKey() { - map.put("apple", 3); - assertTrue(map.containsKey("apple")); - assertFalse(map.containsKey("orange")); - } - - @Test - void testRemove() { - map.put("apple", 3); - map.put("banana", 5); - - Integer removed = map.remove("apple"); - assertEquals(3, removed); - assertNull(map.get("apple")); - assertFalse(map.containsKey("apple")); - - // Removing nonexistent key - assertNull(map.remove("not_exist")); - } - - @Test - void testClear() { - map.put("a", 1); - map.put("b", 2); - map.clear(); - assertEquals(0, map.size()); - assertTrue(map.isEmpty()); - } - - @Test - void testSizeAndIsEmpty() { - assertTrue(map.isEmpty()); - map.put("a", 1); - assertEquals(1, map.size()); - map.put("b", 2); - assertEquals(2, map.size()); - map.remove("a"); - assertEquals(1, map.size()); - map.remove("b"); - assertTrue(map.isEmpty()); - } - - @Test - void testNullKeyThrowsException() { - assertThrows(NullPointerException.class, () -> map.put(null, 1)); - assertThrows(NullPointerException.class, () -> map.get(null)); - assertThrows(NullPointerException.class, () -> map.remove(null)); - assertThrows(NullPointerException.class, () -> map.containsKey(null)); - } -} \ No newline at end of file