Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 코테
- toCharArray
- 문자열
- 고잉버스
- 코딩테스트
- 카카오
- 명령어
- Linux
- 자바스크립트 코딩의 기술
- 리눅스마스터 1급 정리
- map
- 자바
- java 백준 1차원 배열
- 리눅스마스터1급
- 백준 java
- Java
- GoingBus
- 리눅스
- JavaScript
- Kotlin
- 리눅스마스터 3과목
- 연습문제
- 스프링 컨테이너
- 개발자 회고록
- 스프링 빈
- 프로그래머스
- 백준 javascript
- 월간코드챌린지
- Memoir
- 반복문
Archives
- Today
- Total
hoon's bLog
백준 Java & Javascript 1차원 배열 10813, 5597, 3052 본문
반응형
문제출처 : https://www.acmicpc.net/step/6
저번 포스팅에 이어서 1차원 배열!
1차원 배열의 끝이 보인다!
역시 난이도는 아직까지 ★ 수준으로 무난하다!
오히려 Java와 Javascript 두 언어로 다 풀고, 정리해서,
포스팅하는 게 훨씬 오래 걸린다......(그러니 공감/댓글 부탁해요!ㅠㅠ)
자 가보자~!!!
[10813] 공 바꾸기
<문제>
<Java 풀이>
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// StringTokenizer로 N과 M, " "(공백)으로 구분
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // 1~N개 바구니 갯수
int M = Integer.parseInt(st.nextToken()); // M번의 공 교환 방법
// index : 바구니 숫자
// value : 바구니 안에 들어있는 공 숫자
int[] basket = new int[N];
for (int i = 0; i < basket.length; i++) { // 바구니의 공 초기화
basket[i] = i+1;
}
for(int i = 0; i < M; i++) {
// StringTokenizer로 " "(공백)으로 구분(Default)
st = new StringTokenizer(br.readLine());
int changeBall1 = Integer.parseInt(st.nextToken());
int changeBall2 = Integer.parseInt(st.nextToken());
// 임시변수
int tmp = basket[changeBall1-1];
basket[changeBall1-1] = basket[changeBall2-1];
basket[changeBall2-1] = tmp;
}
for(int k = 0; k < basket.length; k++) {
bw.write(basket[k] + " ");
}
br.close();
bw.flush();
bw.close();
}
}
- 30 line : tmp 변수에 입력받은 changeBall1의 값에 1을 뺀 값이 basket의 index로 사용한다.
- (여기서 1을 뺀 이유는 배열의 index = 순번-1 이기 때문!!)
- 32 line : changeBall1의 위치에 changeBall2의 값을 넣어주고, 앞서 저장했던 tmp에 저장된 값을 changeBall2에 저장!
<Javascript 풀이>
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [n, m] = input[0].trim().split(' ').map(x => parseInt(x));
const basket = [];
for (let i=0; i < n; i++) {
basket.push(i+1);
}
for (let i=0; i < m; i++) {
const [I, J] = input[i+1].trim().split(' ').map(x => parseInt(x));
let temp = basket[I-1];
basket[I-1] = basket[J-1];
basket[J-1] = temp;
}
console.log(basket.join(' '));
자바스크립트 문제 역시 임시 변수(temp)를 이용해 값을 바꿔치기하는 방식은 똑같다!
[5597] 과제 안 내신 분..?
<문제>
<Java 풀이>
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
boolean[] arr = new boolean[30];
for (int i = 0; i < 28; i++) {
int n = Integer.parseInt(br.readLine());
arr[n-1] = true;
}
for (int i = 0; i < arr.length; i++) {
if (!arr[i]){
bw.write((i+1) + "\n");
bw.flush();
}
}
br.close();
bw.close();
}
}
- 8~12 line : 문제에서 학생의 출석번호는 최대 30이기 때문에, 배열길이는 30으로 잡고, 학생의 출석번호가 1~30 중에 28개 이므로 for문은 28번만 반복
- 14~16 line : 배열 길이 만큼 for문을 반복하며, 8~12 라인에서 넣어준 배열 값이 true가 아닌 경우, 해당 index +1을 하여 출력한다.
- 17 line : close가 있는데 굳이 flush?? 현재 버퍼에 저장되어 있는 내용을 클라이언트로 전송하고 버퍼를 비운다.
- API에 의하면 OutputStream에 속한 flush()는 출력 스트림과 버퍼된 출력 바이트를 강제로 쓰게 한다.
<Javascript 풀이>
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(x => parseInt(x));
let str = ''
let student = [];
let std1 = 0;
let std2 = 0;
for(let i=0; i < 30; i++){
student[i] = i+1;
for(let j=0; j < input.length; j++){
if(input[j] === student[i]){
student[i] = 0;
break;
}
}
if(student[i] != 0){
str = str + student[i] + '\n';
}
}
console.log(str.trim());
- 9 line : 학생들의 출석번호를 index를 이용해서 저장
- 11 line : input.length로 입력받은 값들의 길이만큼 for문이 반복되면서, input값과 student의 저장된 값을 확인하고, student 배열에 0을 넣어줌
- 18~20 line : student 배열이 0이 아니면 개행해서 출력
- 24 line : 마지막 개행 trim으로 제거
[3052] 나머지
<문제>
<Java 풀이>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
HashSet<Integer> set = new HashSet<>();
for (int i = 0; i < 10; i++) {
set.add(Integer.parseInt(br.readLine()) % 42);
}
System.out.println(set.size());
}
}
- 8 line : Set Collection Framework 사용, Set을 이용하면 10번 라인에 중복값이 나와도, 알아서 중복된 값을 추가하지 않는다.
- 12 line : 중복된 값이 없으므로 set의 size가 출력값이 되겠다.
<Javascript 풀이>
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(x => parseInt(x));
var result = []
for (i = 0; i < 10; i++) {
if (!result.includes(input[i] % 42)) // result 배열에 없으면 추가
result.push(input[i] % 42)
}
console.log(result.length)
- 5~6 line : input 배열의 값을 42로 나눈 나머지가 result 배열에 포함되어있지 않으면 push
그래도 문제풀이 후 꼭 이렇게 포스팅을 해주면,
짯던 코드가 디버깅이 되는 것처럼 명확하게 다가오고,
이렇게 기록을 남기면서 공부도 되니 1석 n조다!
아직 문제 풀이 갈 길이 멀다. 계속 달려보자!
언제나 새로운 정보 공유와 잘못된 정보
지적/태클은 환영입니다!
끝.
Reference
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
백준 Javascript 1차원 배열 10811 (1) | 2023.08.10 |
---|---|
백준 Java 1차원 배열 10811 (2) | 2023.08.09 |
백준 Java & Javascript 1차원 배열 2562, 10810 (0) | 2023.07.26 |
백준 Java & Javascript 1차원 배열 10807, 10871, 10818 (0) | 2023.07.19 |
백준 Java 반복문 2739, 10950, 8393, 25304, 25314, 15552, 11021, 11022, 2438, 2439, 10952, 10951 (2) | 2023.04.10 |