문제

 

숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

 

숫자 /영단어

0 zero
1 one
2 two
3 three
4 four
5 five
6 six
7 seven
8 eight
9 nine

입출력 예

s result
"one4seveneight" 1478
"23four5six7" 234567
"2three45sixseven" 234567
"123" 123

 


코드

import java.util.stream.Stream;

class Solution4 {
	//변환처리를 위한 배열, 순서 중요
	final static String[] INDEX_TO_WORD = 
		{ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
	final static String NUM_STR = "0123456789";
	final static int WORD_LENGTH = 10;

	public static void main(String[] args) {
		Solution4 s = new Solution4();
		System.out.println(
		s.solution("2three45sixseven")
		);
	}
	
	public int solution(String s) {
		return Stream.of(s).mapToInt( arg ->{
			for(int i = 0 ; i < WORD_LENGTH ; i++) {
				arg = arg.replace(INDEX_TO_WORD[i] , String.valueOf(NUM_STR.charAt(i)) );
			}
			return Integer.valueOf(arg).intValue();
		}).sum();
	}
}

 

'자료구조&알고리즘 > Level1' 카테고리의 다른 글

폰켓몬  (1) 2022.10.15
완주하지 못한 선수  (1) 2022.10.12
성격 유형 검사하기  (0) 2022.09.26
신고 결과 받기  (0) 2022.09.24
올바른 괄호  (1) 2022.09.23

문제

지표 번호성격 유형

1번 지표 라이언형(R), 튜브형(T)
2번 지표 콘형(C), 프로도형(F)
3번 지표 제이지형(J), 무지형(M)
4번 지표 어피치형(A), 네오형(N)

 

choices뜻

1 매우 비동의
2 비동의
3 약간 비동의
4 모르겠음
5 약간 동의
6 동의
7 매우 동의

입출력 예

survey  choices  result
["AN", "CF", "MJ", "RT", "NA"] [5, 3, 2, 7, 5] "TCMA"
["TR", "RT", "TR"] [7, 1, 3] "RCJA"

 

 


코드

package solution;
import java.util.HashMap;
import java.util.Map;

class Solution {
	//점수 저장 맵
	Map<Character, Integer> surveyMap = new HashMap<>();
	// 설문지에 맞는 점수배열, 앞에 아무숫자를 넣어 배열보정을 하면 나중에 -1 을 안해도된다.
	int[] scoreArr = {0,3,2,1,0,1,2,3}; 
	String[] survey;
	int[] choices;
	
	public static void main(String[] args) {
		Solution solution = new Solution();
		String[] survey = {"AN", "CF", "MJ", "RT", "NA"};
		int[] choices = {5, 3, 2, 7, 5};
		System.out.println(solution.solution(survey, choices));
	}
	
	public String solution(String[] survey, int[] choices) {
    	this.survey = survey;
    	this.choices = choices;
    	
    	//맵 초기화
    	for(char key : "RTCFJMAN".toCharArray()) {
    		surveyMap.put(key, 0);
    	}
    	
    	//검사지에 따른 점수 계산
    	for(int i=0; i<survey.length;i++) {
    		String tmp = survey[i];
    		char l = tmp.charAt(0);
    		char r = tmp.charAt(1);
			calculate(l,r,i);
    	}
    	
    	return result();
    }
	
	private String result() {
		StringBuilder sb =new StringBuilder();
		// 조건식 수정을 하면 동일할 경우 무엇을 리턴할지를 결정할 수 있다.
    	sb.append( sum('R','T')>=0?"R" : "T");
    	sb.append( sum('C','F')>=0?"C" : "F");
    	sb.append( sum('J','M')>=0?"J" : "M");
    	sb.append( sum('A','N')>=0?"A" : "N");
    	System.out.println(surveyMap);
        return sb.toString();
	}
	
	//점수를 계산한다.
	private void calculate(char l,char r, int i) {
		if(choices[i]<4) {
			accumulateValue(l, scoreArr[choices[i]]);
		}else {
			accumulateValue(r, scoreArr[choices[i]]);
		}
	}
	//계산된 결과에 따라 점수를 누산한다.
	private void accumulateValue(char key, int value) {
		surveyMap.put(key, surveyMap.get(key)+value);
	}
	
	private int sum(char l,char r) {
		return surveyMap.get(l) - surveyMap.get(r);
	}
	
}

결과

{A=1, R=0, C=1, T=3, F=0, J=0, M=2, N=1}
TCMA

choices 인자가 1~7 가 오는데, 그에 따른 점수는 3, 2,1, 0, 1, 2, 3 이다.

이를 보정하기 위해 choices 배열 크기에 맞는 점수 배열을 별도로 만들면, 좋다.

'자료구조&알고리즘 > Level1' 카테고리의 다른 글

완주하지 못한 선수  (1) 2022.10.12
숫자 문자열과 영단어  (0) 2022.10.01
신고 결과 받기  (0) 2022.09.24
올바른 괄호  (1) 2022.09.23
크레인 인형뽑기 게임  (1) 2022.09.21

문제

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

 

프로그래머스

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

programmers.co.kr

문제 설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

제한사항
  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

코드

import java.util.Stack;

class Solution {
	boolean solution(String s) {
		Stack<Character> stack = new Stack<Character>();
		try {
			for (char cha : s.toCharArray()) {
				if (cha == '(')
					stack.add(cha);
				else { //문자열은 '(' , ')' 밖에 없기 때문에 이 조건식
					stack.pop();
				}
			}
		} catch (Exception e) {
			return false; // 예외발생은 pop()에서 날 것 즉, 짝이 안맞는다.
		}
		return stack.empty() ? true : false;
	}
}

결과

정확성  테스트
테스트 1 〉	통과 (0.17ms, 76.7MB)
테스트 2 〉	통과 (0.20ms, 81.6MB)
테스트 3 〉	통과 (0.19ms, 79MB)
테스트 4 〉	통과 (0.22ms, 79MB)
테스트 5 〉	통과 (0.27ms, 76.4MB)
테스트 6 〉	통과 (0.14ms, 77.1MB)
테스트 7 〉	통과 (0.24ms, 78.2MB)
테스트 8 〉	통과 (0.20ms, 75.6MB)
테스트 9 〉	통과 (0.25ms, 72.8MB)
테스트 10 〉	통과 (0.25ms, 75MB)
테스트 11 〉	통과 (0.20ms, 72.4MB)
테스트 12 〉	통과 (0.22ms, 75.1MB)
테스트 13 〉	통과 (0.30ms, 75.5MB)
테스트 14 〉	통과 (0.24ms, 73.4MB)
테스트 15 〉	통과 (0.21ms, 75.4MB)
테스트 16 〉	통과 (0.22ms, 99.7MB)
테스트 17 〉	통과 (0.21ms, 74.8MB)
테스트 18 〉	통과 (0.25ms, 68MB)
효율성  테스트
테스트 1 〉	통과 (15.83ms, 53.8MB)
테스트 2 〉	통과 (14.89ms, 53.1MB)
채점 결과
정확성: 69.5
효율성: 30.5
합계: 100.0 / 100.0

 


예제에서 s 문자열은 '(', ')'만 존재한다고 했다. 

만약 여러 문자열이 섞여있다면 else if로 변경만 하면 될 것이다.

'자료구조&알고리즘 > Level1' 카테고리의 다른 글

성격 유형 검사하기  (0) 2022.09.26
신고 결과 받기  (0) 2022.09.24
크레인 인형뽑기 게임  (1) 2022.09.21
신규 아이디 추천  (0) 2022.09.18
성격 유형 검사하기  (0) 2022.09.17

문제

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

 

프로그래머스

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

programmers.co.kr

문제 설명

스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다.

  1. 속한 노래가 많이 재생된 장르를 먼저 수록합니다.
  2. 장르 내에서 많이 재생된 노래를 먼저 수록합니다.
  3. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다.

노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요.

제한사항
  • genres[i]는 고유번호가 i인 노래의 장르입니다.
  • plays[i]는 고유번호가 i인 노래가 재생된 횟수입니다.
  • genres와 plays의 길이는 같으며, 이는 1 이상 10,000 이하입니다.
  • 장르 종류는 100개 미만입니다.
  • 장르에 속한 곡이 하나라면, 하나의 곡만 선택합니다.
  • 모든 장르는 재생된 횟수가 다릅니다.
입출력 예
genres  plays     return
["classic", "pop", "classic", "classic", "pop"] [500, 600, 150, 800, 2500] [4, 1, 3, 0]
입출력 예 설명

classic 장르는 1,450회 재생되었으며, classic 노래는 다음과 같습니다.

  • 고유 번호 3: 800회 재생
  • 고유 번호 0: 500회 재생
  • 고유 번호 2: 150회 재생

pop 장르는 3,100회 재생되었으며, pop 노래는 다음과 같습니다.

  • 고유 번호 4: 2,500회 재생
  • 고유 번호 1: 600회 재생

따라서 pop 장르의 [4, 1]번 노래를 먼저, classic 장르의 [3, 0]번 노래를 그다음에 수록합니다.

  • 장르 별로 가장 많이 재생된 노래를 최대 두 개까지 모아 베스트 앨범을 출시하므로 2번 노래는 수록되지 않습니다.

 


코드

import java.util.*;
import java.util.stream.IntStream;
import java.util.stream.Stream;

import static java.util.stream.Collectors.*;

class Solution {
	static int i = 0;

	public int[] solution(String[] genres, int[] plays) {
		return IntStream.range(0, genres.length) // intStream
				        .mapToObj(i-> new TopGenrePlay(i, genres[i], plays[i])) // 기본형에서 참조형으로
				        .collect(groupingBy( TopGenrePlay::getGenre))			 // key는 genres[i] 객체 그대로 Map<String, List<TopGenrePlay>>
				        .entrySet().stream()	//   Stream<Entry<String, List<TopGenrePlay>>>
				        .sorted( (a,b)-> { // 스트림 안에서 총 Play집계 값으로 내림차순
					       	 int sum1 = a.getValue().stream().mapToInt(TopGenrePlay::getPlay).sum();
					       	 int sum2 = b.getValue().stream().mapToInt(TopGenrePlay::getPlay).sum();
					       	 return Integer.compare(sum2, sum1);}) //내림차순  
				        .map( entry -> { //<Entry<String, List<TopGenrePlay>>> 
					       	 List tgpList = entry.getValue().stream().sorted()//정렬은 객체에 구현된 Comparable에 의존한다.
							       			 		                 .limit(2)//정렬된 결과에서 2개만 가져온다.
							       			 		                 .map( TopGenrePlay::getId ).collect(toList());//식별값만 필요하다.
					       	 entry.setValue(tgpList);
					       	 return entry; } )
				        .flatMap( entry-> Stream.of(entry.getValue().toArray(new Integer[] {}))) // 하나의 스트림으로 만든다.
				        .mapToInt( Integer::intValue ) //기본형 스트림으로 IntStream
				        .toArray()
				        ;
	}

	public static void main(String[] args) {
		Solution s = new Solution();
		System.out.println(Arrays.toString(s.solution(
				new String[] { "classic", "pop", "classic", "classic", "pop", "trot", "trot", "trot", "pop" },
				new int[] { 1000, 600, 2000, 1000, 2500, 6000, 200, 200, 600 })));

	}

	class TopGenrePlay implements Comparable<TopGenrePlay> {
		int id;
		String genre;
		int play;

		public int getId() {
			return id;
		}

		public void setId(int id) {
			this.id = id;
		}

		public String getGenre() {
			return genre;
		}

		public void setGenre(String genre) {
			this.genre = genre;
		}

		public int getPlay() {
			return play;
		}

		public void setPlay(int play) {
			this.play = play;
		}

		public TopGenrePlay(int id, String genre, int play) {
			super();
			this.id = id;
			this.genre = genre;
			this.play = play;
		}
		@Override
		public String toString() {
			return "[id="+ id + ", genre=" + genre + ", play=" + play + "]";
		}
		@Override
		public int compareTo(TopGenrePlay o) {
			int result = Integer.compare(o.play, this.play);
			if (result == 0) {
				return Integer.compare(this.id, o.id);
			}
			return result;
		}
	}

}

결과

정확성  테스트
테스트 1 〉	통과 (17.71ms, 82.3MB)
테스트 2 〉	통과 (13.47ms, 77.6MB)
테스트 3 〉	통과 (15.14ms, 81.7MB)
테스트 4 〉	통과 (15.90ms, 73.1MB)
테스트 5 〉	통과 (9.80ms, 81.5MB)
테스트 6 〉	통과 (15.30ms, 73.7MB)
테스트 7 〉	통과 (10.73ms, 72.7MB)
테스트 8 〉	통과 (9.44ms, 73.7MB)
테스트 9 〉	통과 (9.91ms, 73.8MB)
테스트 10 〉	통과 (16.23ms, 80.8MB)
테스트 11 〉	통과 (8.91ms, 75MB)
테스트 12 〉	통과 (8.83ms, 75.1MB)
테스트 13 〉	통과 (14.77ms, 81.3MB)
테스트 14 〉	통과 (10.05ms, 78.5MB)
테스트 15 〉	통과 (8.19ms, 75.4MB)

 


퇴근하고 이틀 동안 계속 붙잡았다... 컬렉션으로만 해결하려 했던게 오히려 나에겐 독이였다.

될듯..?말듯...

그러다 문득, 내가 자바를 하는데 너무 함수형으로 생각한 게 아닌가 라는 생각이 들었다.

갑자기 Class를 활용할 생각을 안하고 컬렉션만 쓰려했는지...참...

그래도 이 교훈은 오래 남을 듯 하다.

 

누군가 봐서 조금이라도 도움이 됐으면하는 마음으로 중간중간에 데이터 형을 입력했다.

위 코드의 개략적인 구도는 play, id 순 정렬은 객체의 Comparable 구현에 의존한다.

이 정렬 전에 장르별 정렬은 스트림을 사용해 장르별 그룹화 후 

내부 List 반복으로 총 집계를 내어 정렬했다.

필요한 정렬정보는 모두 모였으므로, 데이터 가공으로 id 배열을 만들어 리턴했다.

 

 

 

문제

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

 

프로그래머스

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

programmers.co.kr

이 차원 배열로 이루어진 인형 뽑기 기계에서 인형을 뽑기

뽑은 인형은 내 보관함에 저장되며, 저장된 인형이 2 연속 같다면 제거한다.

해당 위치에 인형이 없다면 아무일도 하지 않는다.

 

제거된 인형 수를 리턴하도록 구현

 

[제한사항]

  • board 배열은 2차원 배열로 크기는 "5 x 5" 이상 "30 x 30" 이하입니다.
  • board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
    • 0은 빈 칸을 나타냅니다.
    • 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
  • moves 배열의 크기는 1 이상 1,000 이하입니다.
  • moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.

 


코드

import java.util.Deque;
import java.util.LinkedList;
//크레인 인형뽑기 게임
class Solution7 {
	/*편의상 변수로 둔 것*/
	static Deque<Integer> deque = new LinkedList<>();
	static int count = 0;
	static int move = 0;
	static int[][] board = new int[][] {{0,0,0,0,0}
										,{0,0,1,0,3}
										,{0,2,5,0,1}
										,{4,2,4,4,2}
										,{3,5,1,3,1}};
	static int[] moves = new int[] {1,5,3,5,1,2,1,4};
	
	/* 제출 시 콘솔 출력 부분 제거 or 주석 */
	public static void main(String[] args) {
		Solution7 s = new Solution7();
		s.solution(board, moves);
		
		System.out.println("제거된 인형 "+count);
	}
	
	
	public int solution(int[][] board, int[] moves) {
		
		print();
		for(int i=0;i<moves.length;i++) {
			System.out.println("인형뽑기 [" + moves[i] +"] 위치 " );
			get(moves[i]-1 );  // 인덱스 값 보정을 위해 -1
			System.out.println();
			print();
		}
		return count;
	}
	
	// 원하는 인형을 집는다.
	public void get(Integer select) {
		for (int hei = 0; hei< board.length ; hei++) {
			int value = board[hei][select] ;
			System.out.println("인형 찾기... board["+hei+"]["+select+"]"  + (value != 0 ? " 인형 찾음!!" : " 인형 없음"));
			if(value != 0) {
				board[hei][select] = 0;
				add(value);
				return;
			}
			
		}
	}
	
	// 마지막으로 저장한 값과 저장할 값이 같다면 저장하지 않는다.
	public boolean add(Integer num) {
		if(deque.size()!=0 && deque.peekLast().intValue() ==  num.intValue()) {
			System.out.println("제거 = "+deque.peekLast()+","+num);
			deque.pollLast(); // 요소를 꺼냄과 동시에 제거를 해준다.
			count += 2; // 제거한 수 만큼 증가시킨다.
			System.out.println("인형보관함 " + deque);
			return false;
		}
		deque.add(num);
		System.out.println("인형보관함 " + deque);
		return true;
	}
	
	/*출력용 메서드 */
	private void print() {
		for(int i=0;i<board.length;i++) {
			System.out.print("[");
			for(int j=0;j<board[i].length;j++) {
				System.out.print(board[i][j] +( j== board[i].length-1? "" : ", "));
			}
			System.out.println("]");
		}
	}
}

결과

[0, 0, 0, 0, 0]
[0, 0, 1, 0, 3]
[0, 2, 5, 0, 1]
[4, 2, 4, 4, 2]
[3, 5, 1, 3, 1]
인형뽑기 [1] 위치 
인형 찾기... board[0][0] 인형 없음
인형 찾기... board[1][0] 인형 없음
인형 찾기... board[2][0] 인형 없음
인형 찾기... board[3][0] 인형 찾음!!
인형보관함 [4]

[0, 0, 0, 0, 0]
[0, 0, 1, 0, 3]
[0, 2, 5, 0, 1]
[0, 2, 4, 4, 2]
[3, 5, 1, 3, 1]
인형뽑기 [5] 위치 
인형 찾기... board[0][4] 인형 없음
인형 찾기... board[1][4] 인형 찾음!!
인형보관함 [4, 3]

[0, 0, 0, 0, 0]
[0, 0, 1, 0, 0]
[0, 2, 5, 0, 1]
[0, 2, 4, 4, 2]
[3, 5, 1, 3, 1]
인형뽑기 [3] 위치 
인형 찾기... board[0][2] 인형 없음
인형 찾기... board[1][2] 인형 찾음!!
인형보관함 [4, 3, 1]

[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 2, 5, 0, 1]
[0, 2, 4, 4, 2]
[3, 5, 1, 3, 1]
인형뽑기 [5] 위치 
인형 찾기... board[0][4] 인형 없음
인형 찾기... board[1][4] 인형 없음
인형 찾기... board[2][4] 인형 찾음!!
제거 = 1,1
인형보관함 [4, 3]

[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 2, 5, 0, 0]
[0, 2, 4, 4, 2]
[3, 5, 1, 3, 1]
인형뽑기 [1] 위치 
인형 찾기... board[0][0] 인형 없음
인형 찾기... board[1][0] 인형 없음
인형 찾기... board[2][0] 인형 없음
인형 찾기... board[3][0] 인형 없음
인형 찾기... board[4][0] 인형 찾음!!
제거 = 3,3
인형보관함 [4]

[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 2, 5, 0, 0]
[0, 2, 4, 4, 2]
[0, 5, 1, 3, 1]
인형뽑기 [2] 위치 
인형 찾기... board[0][1] 인형 없음
인형 찾기... board[1][1] 인형 없음
인형 찾기... board[2][1] 인형 찾음!!
인형보관함 [4, 2]

[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 5, 0, 0]
[0, 2, 4, 4, 2]
[0, 5, 1, 3, 1]
인형뽑기 [1] 위치 
인형 찾기... board[0][0] 인형 없음
인형 찾기... board[1][0] 인형 없음
인형 찾기... board[2][0] 인형 없음
인형 찾기... board[3][0] 인형 없음
인형 찾기... board[4][0] 인형 없음

[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 5, 0, 0]
[0, 2, 4, 4, 2]
[0, 5, 1, 3, 1]
인형뽑기 [4] 위치 
인형 찾기... board[0][3] 인형 없음
인형 찾기... board[1][3] 인형 없음
인형 찾기... board[2][3] 인형 없음
인형 찾기... board[3][3] 인형 찾음!!
인형보관함 [4, 2, 4]

[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 5, 0, 0]
[0, 2, 4, 0, 2]
[0, 5, 1, 3, 1]
제거된 인형 4

 


 

'자료구조&알고리즘 > Level1' 카테고리의 다른 글

성격 유형 검사하기  (0) 2022.09.26
신고 결과 받기  (0) 2022.09.24
올바른 괄호  (1) 2022.09.23
신규 아이디 추천  (0) 2022.09.18
성격 유형 검사하기  (0) 2022.09.17
public class Main {
	public static void main(String[] args) {
		System.out.println("         ,r'\"7");
		System.out.println("r`-_   ,'  ,/");
		System.out.println(" \\. \". L_r'");
		System.out.println("   `~\\/");
		System.out.println("      |");
		System.out.println("      |");
	}
}

 

'자료구조&알고리즘 > 입출력과 사칙연산' 카테고리의 다른 글

곱셈  (0) 2022.06.15
나머지  (0) 2022.06.15
1998년생인 내가 태국에서는 2541년생?!  (0) 2022.06.15
??!  (0) 2022.06.15
사칙연산  (0) 2022.06.15

 

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.function.BiFunction;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
	
		int value1 = scanner.nextInt();
		int value2 = scanner.nextInt();
		
		BiFunction<Integer, Integer, List<Integer>>  biFunc = 
				(val1,val2)->{
					List<Integer> list = new ArrayList<Integer>();
					int val001 = val2%10;
					int val010 = val2/10%10;
					int val100 = val2/100;
					
					list.add( val1*val001);
					list.add( val1*val010);
					list.add( val1*val100);
					list.add( val1*val2);
					
					return list;
				};
		List<Integer> resultList = calc(value1, value2, biFunc);

		for(Integer val : resultList) {
			System.out.println(val);
		}
		

	}

	public static List<Integer> calc(int a, int b, BiFunction<Integer, Integer, List<Integer>> biFunc){
		return biFunc.apply(a, b);
	}
}

핵심

자바의 정수형 연산 시 소수점 버림 활용 법

'자료구조&알고리즘 > 입출력과 사칙연산' 카테고리의 다른 글

새싹  (0) 2022.06.15
나머지  (0) 2022.06.15
1998년생인 내가 태국에서는 2541년생?!  (0) 2022.06.15
??!  (0) 2022.06.15
사칙연산  (0) 2022.06.15

문제


(A+B)%C는 ((A%C) + (B%C))%C 와 같을까?

(A×B)%C는 ((A%C) × (B%C))%C 와 같을까?

세 수 A, B, C가 주어졌을 때, 위의 네 가지 값을 구하는 프로그램을 작성하시오.

 

입력


첫째 줄에 A, B, C가 순서대로 주어진다. (2 ≤ A, B, C ≤ 10000)

 

출력


첫째 줄에 (A+B)%C, 둘째 줄에 ((A%C) + (B%C))%C, 셋째 줄에 (A×B)%C, 넷째 줄에 ((A%C) × (B%C))%C를 출력한다.

 

예시


입력 : 5  8  4

출력 

1

1

0

0

 

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.function.Function;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		List<Integer> intList = new ArrayList<Integer>();
		intList.add(scanner.nextInt());
		intList.add(scanner.nextInt());
		intList.add(scanner.nextInt());

		System.out.println(calc(intList, (list) -> {
			int A = list.get(0);
			int B = list.get(1);
			int C = list.get(2);
			return (A + B) % C;
		}));
		System.out.println(calc(intList, (list) -> {
			int A = list.get(0);
			int B = list.get(1);
			int C = list.get(2);
			return ((A%C) + (B%C))%C;
		}));
		System.out.println(calc(intList, (list) -> {
			int A = list.get(0);
			int B = list.get(1);
			int C = list.get(2);
			return (A*B)%C;
		}));
		System.out.println(calc(intList, (list) -> {
			int A = list.get(0);
			int B = list.get(1);
			int C = list.get(2);
			return  ((A%C) * (B%C))%C;
		}));

	}

	public static int calc(List<Integer> intList, Function<List<Integer>, Integer> func) {
		return func.apply(intList);
	}
}

핵심

알고리즘보다 자바8에 도입된 함수형 프로그래밍 개념을 사용

메서드를 값으로 다뤄 매개변수로 넣었음. 

'자료구조&알고리즘 > 입출력과 사칙연산' 카테고리의 다른 글

새싹  (0) 2022.06.15
곱셈  (0) 2022.06.15
1998년생인 내가 태국에서는 2541년생?!  (0) 2022.06.15
??!  (0) 2022.06.15
사칙연산  (0) 2022.06.15

문제


ICPC Bangkok Regional에 참가하기 위해 수완나품 국제공항에 막 도착한 팀 레드시프트 일행은 눈을 믿을 수 없었다. 공항의 대형 스크린에 올해가 2562년이라고 적혀 있던 것이었다.

불교 국가인 태국은 불멸기원(佛滅紀元), 즉 석가모니가 열반한 해를 기준으로 연도를 세는 불기를 사용한다. 반면, 우리나라는 서기 연도를 사용하고 있다. 불기 연도가 주어질 때 이를 서기 연도로 바꿔 주는 프로그램을 작성하시오.

 

입력


서기 연도를 알아보고 싶은 불기 연도 y가 주어진다. (1000 ≤ y ≤ 3000)

 

출력


불기 연도를 서기 연도로 변환한 결과를 출력한다.

 

예시


입력 : 2541

출력 : 1998

 

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println(scanner.nextInt()-543);
		
	}
	
}

핵심

예시를 보고 보정 값인 -543을 구하기

'자료구조&알고리즘 > 입출력과 사칙연산' 카테고리의 다른 글

곱셈  (0) 2022.06.15
나머지  (0) 2022.06.15
??!  (0) 2022.06.15
사칙연산  (0) 2022.06.15
A/B  (0) 2022.06.15

문제


준하는 사이트에 회원가입을 하다가 joonas라는 아이디가 이미 존재하는 것을 보고 놀랐다. 준하는 놀람을 ??!로 표현한다. 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때, 놀람을 표현하는 프로그램을 작성하시오.

입력


첫째 줄에 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어진다. 아이디는 알파벳 소문자로만 이루어져 있으며, 길이는 50자를 넘지 않는다.

출력


첫째 줄에 준하의 놀람을 출력한다. 놀람은 아이디 뒤에 ??!를 붙여서 나타낸다.

예시


입력값 : wow

출력값 : wow??!

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		String id1 = scanner.next();
		
		System.out.println(appendString(id1));
		
		
    }
	
	public static String appendString(String str) {
		return new StringBuffer(str).append("??!").toString();
	}
	
}

핵심

문자열 결합은 StringBuffer를 사용하는 것이 좋다. String은 변경불가능한 상수로 매번 새로운 객체가 생성되지만, StringBuffer는 문자 그대로 내부에 Buffer가 있어 불필요한 새로운 객체 생성이 없다.

'자료구조&알고리즘 > 입출력과 사칙연산' 카테고리의 다른 글

나머지  (0) 2022.06.15
1998년생인 내가 태국에서는 2541년생?!  (0) 2022.06.15
사칙연산  (0) 2022.06.15
A/B  (0) 2022.06.15
AxB  (0) 2022.06.15

+ Recent posts